我在mysql上运行此查询:
ALTER TABLE `connections`
ADD CONSTRAINT `connections_serial_fk`
FOREIGN KEY (`serial`)
REFERENCES `devices`(serial)
ON DELETE CASCADE;
我收到错误编号150.我已经查找了文档,我认为可能导致此错误的是该列' serial'是一个varchar(255)。
This reference说" innodb允许外键引用任何索引列或列组#34;。
MySql是否有此限制?
从我的架构:
设备:
| Field | Type | Null | Key | Default | Extra |
| serial | varchar(255) | YES | | NULL | |
连接:
| Field | Type | Null | Key | Default | Extra |
| serial | varchar(255) | YES | | NULL | |
答案 0 :(得分:1)
符合标准SQL的dbms将阻止您设置对没有某种唯一约束的列(或列)的外键引用 - PRIMARY KEY或UNIQUE。但在某些情况下MySQL does permit this kind of nonsense。
此外,MySQL要求对引用的列进行索引 出于性能原因。但是,系统不强制执行 要求引用的列为UNIQUE或声明为NOT 空值。处理对非唯一键或键的外键引用 对于诸如的操作,没有很好地定义包含NULL值的值 更新或删除CASCADE。建议您使用外键 仅引用UNIQUE(包括PRIMARY)和NOT NULL键。
外键只应引用已声明为PRIMARY KEY
或NOT NULL UNIQUE
的一列(或多列)。如果你认为你需要一个非独特的一列或多列的外键引用,这是一个大红旗,挥舞着你的脸,由一个男人大喊大叫,"你有一个设计问题!"