表中不存在键列'cat_id'

时间:2011-07-08 06:51:16

标签: mysql

我有<{p>}表category

cat_id
category

和表products

prod_id
products

和另一张表product_category

pkey
index

我试图在product_category上添加外键:

ALTER TABLE product_category
ADD FOREIGN KEY (cat_id)
REFERENCES categories(cat_id)

问题是什么?

5 个答案:

答案 0 :(得分:4)

您的表格product_category没有cat_id字段,因此您无法添加引用。 添加具有相同数据类型categoriy.cat_id的字段,然后重试。

你使用了什么storage engine?请注意,MyISAM不支持checking for foreign key constraints

我猜pkey应该是对prod_id的引用?将其命名为prod_id或类似的内容会使其更清楚地引用它。

答案 1 :(得分:1)

您必须先在表中添加cat_id,然后尝试添加外键引用。

alter table Table_name
add col_name data_type constraints

答案 2 :(得分:1)

问题是您的表名为category(单数),并且您尝试引用表categories(复数),除此之外您没有使用表中的字段名称PRODUCT_CATEGORY。

请参阅以下示例,它可以执行您所需的操作。 (我已经从product_category更改了字段名称,因此更清楚在哪里使用)。

mysql> create table category (cat_id int, category varchar(200));
Query OK, 0 rows affected (0.39 sec)

mysql> create table products (prod_id int, product varchar(200));
Query OK, 0 rows affected (0.40 sec)

mysql> create table product_category (pc_prod_id int, pc_cat_id int);
Query OK, 0 rows affected (0.13 sec)

mysql> alter table product_category add foreign key (pc_cat_id) references category(cat_id);
Query OK, 0 rows affected (0.42 sec)
Records: 0  Duplicates: 0  Warnings: 0

答案 3 :(得分:1)

这是应该如何修复:

我们有两个表,

table1( id_table1 int primary key, field int)ENGINE=INNODB;
table2( id_table2 int primary key, id_table1 int, field2 int)ENGINE=INNODB;

如果您想将table1的主键放在table2中,则必须声明 table2

id_table1

像这样:id_table1 integer

然后写下您的foreign key(id_table1)引用table1(id_table1)

答案 4 :(得分:0)

您的表product_category不包含您在查询中指定的列。 添加它并运行此查询....

查询没有问题..