外键无法添加

时间:2014-10-11 07:07:43

标签: mysql

我尝试添加外键

CREATE TABLE `uniform_product_details` ( 
  `upc_id` VARCHAR(32) NOT NULL, 
  `product_id` int(11),
  `condition_id` tinyint(1) NOT NULL,
  `status`  INT NOT NULL,
  `created_by` VARCHAR(32), 
  `updated_by` VARCHAR(32),
  `date_added` datetime NOT NULL,
  `date_modified` datetime NOT NULL,
  PRIMARY KEY(`upc_id`),
  INDEX `pid` (`product_id`),
  FOREIGN KEY(`product_id`) REFERENCES product(`product_id`) ON DELETE CASCADE
);

但是我的Toad在执行此操作时显示错误

  

MySQL数据库错误:无法添加外键约束

我对此查询是否存在任何逻辑错误。帮助!!

2 个答案:

答案 0 :(得分:1)

请尝试以下代码:

CREATE TABLE `uniform_product_details1` ( 
  `upc_id` VARCHAR(32) NOT NULL, 
  `product_id` int(11),
  `condition_id` tinyint(1) NOT NULL,
  `status`  INT NOT NULL,
  `created_by` VARCHAR(32), 
  `updated_by` VARCHAR(32),
  `date_added` datetime NOT NULL,
  `date_modified` datetime NOT NULL,
  PRIMARY KEY(`upc_id`),
  INDEX `pid` (`product_id`),
  FOREIGN KEY(`product_id`)  REFERENCES product(`product_id`) ON DELETE CASCADE
)ENGINE=InnoDB;

答案 1 :(得分:0)

可能与引擎有关... MyISAM表不支持外键。将引擎定义为InnoDB:

create table uniform_product_details(
    -- All your column definitions
)ENGINE=InnoDB;

您可能需要更改其他表的引擎。如果是这种情况,请使用:

alter table another_table ENGINE=InnoDB;

解决方案的完整序列可能如下:

  1. 创建表,不带外键定义
  2. 更改所有表:将引擎设置为InnoDB以便所有表
  3. 添加外键定义:

    alter table any_table add foreign key ...;


  4. 关于MySQL存储引擎的进一步参考: