麻烦将一个数据库表限制为另一个

时间:2014-09-07 15:07:27

标签: mysql sql

我是SQL的新手,并试图学习如何在桌面上引用另一个。这就是我所拥有的:

CREATE TABLE IF NOT EXISTS itemData (
  id int(11) AUTO_INCREMENT PRIMARY KEY,
  title varchar(64) NOT NULL,
  sector_id int(11) DEFAULT NULL,
  status_id int(11) DEFAULT NULL,
  locations_id int(11) DEFAULT NULL,
  payments_id int(11) DEFAULT NULL,
  type_id int(11) DEFAULT NULL,
  CONSTRAINT `fk_sector_id` FOREIGN KEY (sector_id) REFERENCES `sector` (`sector_id`),
  CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `status` (`status_id`),
  CONSTRAINT `fk_locations_id` FOREIGN KEY (`locations_id`) REFERENCES `location` (`locations_id`),
  CONSTRAINT `fk_payments_id` FOREIGN KEY (`payments_id`) REFERENCES `payments` (`payments_id`),
  CONSTRAINT `fk_type_id` FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) 
);

然后我有我的参考表例如:

CREATE TABLE IF NOT EXISTS itemStatus (
  id int(11) AUTO_INCREMENT PRIMARY KEY,
  name varchar(64) NOT NULL UNIQUE KEY
);

这似乎没有验证,有人可以告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:3)

您可能需要像这样更改表定义:

CREATE TABLE IF NOT EXISTS itemStatus (
  status_id int(11) AUTO_INCREMENT PRIMARY KEY,
  name varchar(64) NOT NULL UNIQUE KEY
);

因为表中的约束定义是这样的:

CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `itemstatus` (`status_id`),

您需要更新约束中的正确表。

此外,如果您不想更改表定义,请更改约束,如下所示:

CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `itemstatus` (`id`)

答案 1 :(得分:2)

这是你的约束:

CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `status` (`status_id`)

这里是表格定义:

CREATE TABLE IF NOT EXISTS itemStatus (
  id int(11) AUTO_INCREMENT PRIMARY KEY,
  name varchar(64) NOT NULL UNIQUE KEY
);

该表中没有名为status_id的列。

将主键列重命名为status_id或将约束更改为指向id