ограничения внешнего ключа не применяются к MariaDB, что я делаю не так? - PullRequest
1 голос
/ 18 февраля 2020

Несмотря на то, что мне показалось, что я понял логи c во внешних ключах, я не могу заставить этот небольшой пример работать.

В этом примере я вставляю значения, которые break ограничение внешнего ключа. Я бы ожидал получить ошибку - но я не получаю.

/* info about my server */
select version();
show variables where variable_name = "foreign_key_checks";

/* example starts here */
create table foo (id int primary key) engine = 'InnoDB';
insert into foo values (1);
create table bar (id int primary key references foo(id)) engine = 'InnoDB';
insert into bar values (2); -- should complain here, but does not
commit;
select * from foo;
select * from bar;

Это приводит к:

MariaDB [test]> select version();
+-----------------+
| version()       |
+-----------------+
| 10.3.21-MariaDB |
+-----------------+
1 row in set (0.000 sec)

MariaDB [test]> show variables where variable_name = "foreign_key_checks";
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | ON    |
+--------------------+-------+
1 row in set (0.002 sec)

MariaDB [test]> create table foo (id int primary key) engine = 'InnoDB';
Query OK, 0 rows affected (0.358 sec)

MariaDB [test]> insert into foo values (1);
Query OK, 1 row affected (0.040 sec)

MariaDB [test]> create table bar (id int primary key references foo(id)) engine = 'InnoDB';
Query OK, 0 rows affected (0.205 sec)

MariaDB [test]> insert into bar values (2);
Query OK, 1 row affected (0.024 sec)

MariaDB [test]> commit;
Query OK, 0 rows affected (0.000 sec)

MariaDB [test]> select * from foo;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.001 sec)

MariaDB [test]> select * from bar;
+----+
| id |
+----+
|  2 |
+----+
1 row in set (0.000 sec)

Так как "Похоже, что [мой] пост в основном состоит из кода; пожалуйста, добавьте больше деталей. ", позвольте мне перефразировать здесь. В приведенном выше примере

  1. я проверил, что мой сервер настроен на принудительное использование ограничений внешнего ключа,
  2. Я явно использую механизм InnoDB - тот, который фактически обеспечивает ограничение внешнего ключа.

Несмотря на это, bar содержит id из 2, которого нет в foo. Что я тут не так делаю?

1 Ответ

0 голосов
/ 18 февраля 2020

вставить в значения foo (1); создать панель таблицы (id int не нулевой первичный ключ, id_foo int, внешний ключ (id_foo) ссылается на foo (id)); должен работать для вас.

вставить в бар значения (2,1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...