0

我有以下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 - 无法创建表'hotels.#sql-b80_155'(错误号: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;

这两个表目前都是空的。请找出我的代码中的矛盾。有点急。感谢你的支持。

4

2 回答 2

2

使用FOREIGN KEY约束中所述:

MySQL 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。

因此,您必须首先创建一个索引adv_publish.advertise_id

ALTER TABLE adv_publish ADD INDEX (advertise_id)
于 2013-10-23T16:40:30.460 回答
1

这是因为它必须引用 PRIMARY KEY(或 UNIQUE 索引)并且您编写的脚本引用advertise_id 而不是作为主键的 id。

于 2013-10-23T16:40:48.113 回答