Несмотря на то, что мне показалось, что я понял логи 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)
Так как "Похоже, что [мой] пост в основном состоит из кода; пожалуйста, добавьте больше деталей. ", позвольте мне перефразировать здесь. В приведенном выше примере
- я проверил, что мой сервер настроен на принудительное использование ограничений внешнего ключа,
- Я явно использую механизм InnoDB - тот, который фактически обеспечивает ограничение внешнего ключа.
Несмотря на это, bar
содержит id
из 2, которого нет в foo
. Что я тут не так делаю?