无法在两个表之间创建关系

时间:2014-01-30 17:10:04

标签: mysql one-to-many

我的Shade颜色看起来像这样

CREATE TABLE `Shade` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `shade_name` varchar(250) DEFAULT NULL,
  `color_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=156 DEFAULT CHARSET=latin1;

我有Color表需要与Shade表有一对多的关系。所以这就是我所做的:

CREATE TABLE `Color` (
  `id` int(11) unsigned NOT NULL,
  `color_name` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`id`) 
  ,foreign key (`id`) references shade (`color_id`)
     on delete cascade
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

但我收到了一个错误:Can't create table: errno: 150

1 个答案:

答案 0 :(得分:0)

您正在错误的地方定义外键。

Color是您的“主”表,因此它不应定义任何外键:

CREATE TABLE `Color` (
  `id` int(11) unsigned NOT NULL,
  `color_name` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Shade是“详细信息”表 - 它引用Color(由它包含的color_id列显示),因此它应该保存外键的定义:

CREATE TABLE `Shade` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `shade_name` varchar(250) DEFAULT NULL,
  `color_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`color_id`) references Color (`id`)
     ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=156 DEFAULT CHARSET=latin1;