MySQL - 无法创建表(errno : 150) - Foreign key constraints

标签 mysql constraints cascade

我想在我的 MySQL 数据库中创建这 3 个表:

CREATE TABLE categories (
    category_id SMALLINT NOT NULL AUTO_INCREMENT,
    category VARCHAR(255) NOT NULL UNIQUE,
    description TINYTEXT NOT NULL,
    PRIMARY KEY (category_id)
);


CREATE TABLE product (
    product_id SMALLINT NOT NULL AUTO_INCREMENT,
    product VARCHAR(255) NOT NULL UNIQUE,
    description TINYTEXT NOT NULL,
    price DECIMAL(6,2) NOT NULL,
    PRIMARY KEY (product_id)
);

CREATE TABLE categories_products (
    category_id SMALLINT NOT NULL,
    product_id SMALLINT NOT NULL,
    PRIMARY KEY (category_id, product_id),
    FOREIGN KEY (category_id) REFERENCES categories (category_id)
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products (product_id)
        ON DELETE CASCADE ON UPDATE CASCADE
);

问题出在最后一张表上。我得到一个错误:

1005 - Can't create table 'test1.categories_products' (errno: 150)

但是当我尝试在没有限制的情况下创建它时,它会起作用。

CREATE TABLE categories_products (
    category_id SMALLINT NOT NULL,
    product_id SMALLINT NOT NULL,
    PRIMARY KEY (category_id, product_id)
);

我需要约束以防产品或类别被删除。我做错了什么?

最佳答案

好像有错字

CREATE TABLE product

(单数)

然后引用

FOREIGN KEY (product_id) REFERENCES products (product_id)

(复数)。

关于MySQL - 无法创建表(errno : 150) - Foreign key constraints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955917/

相关文章:

database - oracle中的条件唯一约束

c# - Entity Framework Core 级联删除一对一关系

c++ - OpenCV Traincascade 返回垃圾

php - 将循环的 MySQL 数组存储为字符串变量

phpmyadmin 隐藏列

mysql - 根据参数选择升序或降序

ios - 以编程方式越界 UIView 约束

php - 如何在 if 语句中添加查询结果限制?

postgresql - 将 UNIQUE 约束转换为 CHECK 或触发器

java - 在带 Hibernate 的 JPA 2 中强制传递持久性顺序?