mysql - 为什么我可以为不存在的表创建外键约束?

标签 mysql sql foreign-keys

我在研究外键约束时意识到我可以向不存在的表添加约束。我也可以插入记录,没问题。

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/

相关文章:

php - 升级 php 后 MySQL 无法在 mac Sierra 上运行

unit-testing - 在 PHPUnit/DBUnit 中关闭外键约束

c++ - 跨平台mySQL与字符集不一致

mysql - 将mysql数据库从一台服务器迁移到另一台服务器

sql - 是否可以从 WHERE 子句捕获数据?

单独列中的 SQL 联合

c# - NHibernate - QueryOver 子行作为逗号分隔值

sql - 在 PostgreSQL 中删除带有外键的行

sql-server - SQL Server 数据库中的 ON DELETE NO ACTION 约束

jquery - Ajax 成功后触发迷你图内联图