外键约束错误1005

时间:2012-12-05 12:07:57

标签: mysql database

我的数据库中有以下2个表:

CREATE TABLE `address` (
  `id` bigint(20) NOT NULL auto_increment,
  `entity_creation_timestamp` datetime default NULL,
  `entity_version` bigint(20) default NULL,
  `city` varchar(255) default NULL,
  `country` varchar(255) NOT NULL,
  `county` varchar(255) default NULL,
  `label` varchar(255) default NULL,
  `line1` varchar(255) default NULL,
  `line2` varchar(255) default NULL,
  `line3` varchar(255) default NULL,
  `state` varchar(255) NOT NULL,
  `zip` varchar(255) NOT NULL,
  `zip_extension` varchar(255) default NULL,
  `party_id` bigint(20) default NULL,
  `list_index` int(11) default NULL,
  `last_updated_timestamp` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_party_postaladdress_id` (`party_id`),
  CONSTRAINT `fk_party_postaladdress_id` FOREIGN KEY (`party_id`) REFERENCES `sims_party` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

另一个:

CREATE TABLE `state` (
  `state` varchar(255) NOT NULL,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`state`),
  KEY `pk_state` (`state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我正在尝试将'address'表中'state'列的外键约束应用于'state'表中的'name'列。

我正在使用的命令是:

ALTER TABLE address
  ADD CONSTRAINT FK_address_state FOREIGN KEY (state)
    REFERENCES state(state) ON DELETE RESTRICT ON UPDATE RESTRICT;

但是每次运行此命令时,都会出现以下错误:

ERROR 1005 (HY000): Can't create table 'db.#sql-75c_da' (errno: 150)

知道哪里出错... ???

1 个答案:

答案 0 :(得分:0)

如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。类似地,如果ALTER TABLE失败并且它引用错误150,则意味着对于更改的表将错误地形成外键定义。要显示服务器中最新的InnoDB外键错误的详细说明,请发出SHOW ENGINE INNODB STATUS

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html