Mysql:添加外键不会在MyISAM表上给出警告/错误

这是我制作的一张桌子:

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

谢谢

J.P

解决方法:

myISAM没有引用完整性.似乎添加这样的约束是合法的,因此没有错误,尽管只要引擎是myISAM就不会强制执行约束.它确实存储了创建的密钥,因此用户可以看到它的用途.

上一篇:Python的日志记录模块错过了“captureWarnings”功能


下一篇:c# – “是”运算符编译时警告