我在研究外键约束时意识到我可以向不存在的表添加约束。我也可以插入记录,没问题。
mysql> show tables;
Empty set (0.00 sec)
mysql> create table t(id int, FOREIGN KEY (id) REFERENCES x(id));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values (1);
Query OK, 1 row affected (0.00 sec)
我在想是不是我不太明白外键约束。
最佳答案
我认为默认存储设置为 MyIsam,而不是 InnoDb,并且表创建为 MyIsam,而不是 Innodb。
只有 Innodb 表支持外键。
对于 MyIsam 表,不支持外键约束,在使用 create table
命令创建表时,会解析外键规范,但会被忽略。
尝试使用 SET storage_engine=innodb;
将 innodb
设置为默认引擎,或者像这样明确地使用 Innodb 创建一个表:
create table t(id int, FOREIGN KEY (id) REFERENCES x(id)) engine=innodb;
关于mysql - 为什么我可以为不存在的表创建外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122880/