我用以下约束创建了两个表ORDERS和ORDERITEMS:
alter table OrderItems add constraint FK_Reference_30 foreign key (orderId)
references Orders (orderId) on delete restrict on update restrict;
Run Code Online (Sandbox Code Playgroud)
如果我想在ORDERS表中删除一个条目,并且在ORDERITEMS表中使用orderId,我认为我应该得到错误或警告.但实际上我一无所获.我在ORDER中插入了两行,在ORDERITEMS中插入了几行.当我试图删除ORDERS中的所有行时,我做到了.没有抱怨.我正在使用Toad for MySQL的MySQL数据库.
我猜你正在使用MyISAM表.
如果运行" SHOW CREATE TABLE OrderItems",您将看到它无法记录外键定义.
MyISAM表不支持外键.MySQL会解析语法,但在使用MyISAM时会以静默方式丢弃它.如果对Orders和OrderItem使用InnoDB表,这将更好.
您应该默认启用InnoDB.它被禁用是不寻常的.您可以验证是否这样做:
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)
如果这是真的,那么您可以指定ENGINE=INNODB何时CREATE或ALTER表:
mysql> ALTER TABLE Orders ENGINE=INNODB;
mysql> ALTER TABLE OrderItems ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)
请务必仔细检查它是否成功SHOW CREATE TABLE <name>.
现在您可以添加约束,它应该生效.
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |