这是我制作的表格:
mysql> show create table notes;
+-------+----------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------+
| notes | CREATE TABLE `notes` (
`id` int(11) NOT NULL auto_increment,
`note` text NOT NULL,
`status` enum('active','hidden','deleted','followup','starred') default NULL,
`created` datetime NOT NULL,
`last_updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+----------------------------------------+
我尝试添加外键约束:
mysql> alter table notes add constraint foreign key(`id`) references `notetypes`.`id` on update cascade on delete restrict;
Query OK, 0 rows affected (0.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
没有错误!没有警告!由于这个原因,我已经使用没有外键的内部数据库(假设它们存在)有一段时间了。知道这是一个错误还是我做错了什么? mysql 中是否有可以避免此类陷阱的解决方法或选项?
<小时/>$ mysql --version
mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2
<小时/>
谢谢
日本
最佳答案
myISAM 不执行引用完整性。添加此类约束似乎是合法的,因此不会出现错误,但只要引擎是 myISAM,就不会强制执行约束。不过,它确实存储了创建的 key ,以便用户可以看到其意图。
关于Mysql:添加外键不会在 MyISAM 表上发出警告/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554820/