我有下面的mysql表结构
这是第一表的结构:
CREATE TABLE IF NOT EXISTS `adv_publish` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`advertise_id` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`createdat` datetime NOT NULL,
`removedat` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;这是第二表的结构:
CREATE TABLE IF NOT EXISTS `adv_analytics` (
`id` int(11) NOT NULL,
`publish_advertiser_id` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;这是两个表之间的外键关系。执行时,会收到以下错误消息:
1005 -无法创建“酒店”表。#SQL-B80_155 (errno: 150)
ALTER TABLE adv_analytics ADD FOREIGN KEY fk_advertise_id (publish_advertiser_id) REFERENCES adv_publish(advertise_id) ON UPDATE CASCADE ON DELETE CASCADE;两个表当前都是空的。请找出我代码中的矛盾之处。有点急事。谢谢你的支持。
发布于 2013-10-23 16:40:30
如在 Constraints下所记录的
MySQL需要对外键和引用键进行索引,这样外键检查就可以快速而不需要表扫描。
因此,必须首先在adv_publish.advertise_id上创建索引。
ALTER TABLE adv_publish ADD INDEX (advertise_id)发布于 2013-10-23 16:40:48
这是因为它必须引用一个主键(或唯一索引),而您编写的脚本引用的是advertise_id而不是id,后者是主键。
https://stackoverflow.com/questions/19547340
复制相似问题