繁体   English   中英

MySQL-无法创建表(错误号:150)-外键约束

[英]MySQL - Can't create table (errno: 150) - Foreign key constraints

我想在我的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-无法创建表“ test1.categories_products”(错误号:150)

但是当我尝试在没有约束的情况下创建它时,它将起作用。

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

如果需要删除产品或类别,我需要约束。 我究竟做错了什么?

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 products (
    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
);

您创建了“产品”,但引用了“产品”。

顺便说一句,您应该创建一个ID列,并将其用作“ categories_products”中的主键,并在两个列上添加第二个(唯一)索引。 这是最佳做法,INNODB还是会在内部创建ID列,因此...

似乎有错字

CREATE TABLE product

(单数)

然后引用

FOREIGN KEY (product_id) REFERENCES products (product_id)

(复数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM