我试图用外键创建一些表,但是我收到了这个错误。
这些是我的CREATE TABLEs:
CREATE TABLE snmptt_listpolls (
id int(11) NOT NULL AUTO_INCREMENT,
ip varchar(50) NOT NULL DEFAULT 'no_ip_found',
polling_time int(10) NOT NULL,
communitydata varchar(100) NOT NULL,
snmp_oid varchar(250) DEFAULT NULL,
lastcheck datetime DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE TABLE snmptt_nodes (
ID int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
ip varchar(50) NOT NULL DEFAULT 'no_ip_found',
PRIMARY KEY (ID),
UNIQUE KEY ip(ip),
FOREIGN KEY (ip) REFERENCES snmptt_listpolls(ip)) ;
------------------------最新的外键错误
151015 12:42:24表noname_jc_sandbox / snmptt_nodes的外键约束出错:FOREIGN KEY(ip) 参考资料snmptt_listpolls(ip)):找不到索引 引用的列,其中引用的列显示为第一个 表中的列或列类型以及引用的表中没有 匹配约束。请注意ENUM的内部存储类型和 在使用> = InnoDB-4.1.12创建的表中更改了SET,以及此类列 在旧表中,新表中的这些列不能引用它们。看到 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 正确的外键定义。
答案 0 :(得分:2)
错误消息说明了:
...在引用的表格中找不到索引...
在创建snmptt_nodes表之前执行此操作:
CREATE INDEX idx_snmptt_listpolls_ip ON snmptt_listpolls(ip);
答案 1 :(得分:0)
尽管与OP无关,我仍然要指出此错误是由另一个不可思议的原因引起的。
原因是CHARSET。如果您使用CHARSET = latin1创建了引用表(创建表时我没有提供字符集,也许是默认的),并尝试使用其他一些CHARSET创建引用表,例如utf8,那么您也会收到此错误。
底线:确保引用表和被引用表的CHARSET相同。