我正在尝试向表中添加外键,我收到以下错误:
ERROR 1005 (HY000): Can't create table 'tablename.#sql-5cf_179' (errno: 150)
我使用此查询:
alter table table_1 add foreign key (col_1) references table_2 (col_2);
两个列都具有相同的数据类型(varchar(50)),相同的排序规则,它们不是null,我将默认值更改为与null不同的值。
我检查了SHOW ENGINE INNODB状态并得到了这个:
在引用的表中找不到引用的索引 列显示为表中的第一列或列类型 引用的表与约束不匹配。请注意 在使用
创建的表中更改了ENUM和SET的内部存储类型= InnoDB-4.1.12,旧表中的此类列不能被新表中的此类列引用。看到 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 正确的外键定义。
我不知道下一步该做什么......
编辑更多信息:
|snmptt_nodes | 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',
`last_response` datetime NOT NULL,
`state` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
| snmptt | CREATE TABLE `snmptt` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`eventname` varchar(4000) DEFAULT NULL,
`eventid` varchar(4000) DEFAULT NULL,
`trapoid` varchar(4000) DEFAULT NULL,
`enterprise` varchar(4000) DEFAULT NULL,
`community` varchar(4000) DEFAULT NULL,
`hostname` varchar(4000) DEFAULT NULL,
`agentip` varchar(50) NOT NULL DEFAULT 'no_ip_found',
`category` varchar(4000) DEFAULT NULL,
`severity` varchar(4000) DEFAULT NULL,
`uptime` varchar(4000) DEFAULT NULL,
`traptime` varchar(4000) DEFAULT NULL,
`formatline` varchar(4000) DEFAULT NULL,
`timestamp` datetime DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=206352 DEFAULT CHARSET=latin1 |
| snmptt_listpolls | 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`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=latin1 |