0

我一直在尝试在表上创建外键来引用价格表,这是我到目前为止的语法,它会产生错误,

CREATE TABLE shirts(
        shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        shirt_name VARCHAR(100) NOT NULL,
        shirt_type VARCHAR(10) NOT NULL,
        shirt_size VARCHAR(20) NOT NULL,
        qp_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.qp_price NOT NULL,
        o_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.o_price NOT NULL,
        clr_options VARCHAR(30) NULL,
        qty NUMERIC(5,0) NULL
    )ENGINE=INNODB

“价格表”有3列,分别是price_id、price_cat和price。我想要衬衫表中的 qp_price 和 o_price 列做的是根据我在衬衫表上这些列中输入的数字显示 price_list 表的价格列。例如,

如果我做

INSERT INTO shirts(shirt_name,shirt_type,shirt_size,qp_price,o_price)VALUES
        ('Crewneck Tee','Men','S','1','2'),
        ('Crewneck Tee','Men','M','1','2'),
        ('Crewneck Tee','Men','L','1','2'),
        ('Crewneck Tee','Men','1X','1','2'),
        ('Crewneck Tee','Men','2X','3','4'),
        ('Crewneck Tee','Men','3X','5','6'),
        ('Crewneck Tee','Men','4X','7','8'),
        ('Crewneck Tee','Men','5X','9','10')

SL 圆领 T 恤将在价格列的第一行和第二行显示价格,因为它链接到 price_list 表上的 price_id 列......我该怎么做?

4

1 回答 1

1

CREATE TABLE statmenet FOREIGN KEY REFERENCES 子句中的 ON 不是连接,它旨在指定行为,例如 ON UPDATE CASCADE ON DELETE RESTRICT。

另外,我在14.6.4.4找到了关于 MySQL 5.1 的评论。外键约束

确保您分别在表 1 和表 2 中索引了表 1 和表 2 的引用列。如果不这样做,将标记错误“#1005 - 无法创建表 'prospect' (errno:105)”。(索引是一种很好的做法,因为它可以避免全表扫描!)一旦处理好并且引用的列具有相同的数据类型,您就可以成功地创建所需的表,其中包含任意数量的 FK。

CREATE TABLE shirts(
    shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    shirt_name VARCHAR(100) NOT NULL,
    shirt_type VARCHAR(10) NOT NULL,
    shirt_size VARCHAR(20) NOT NULL,
    qp_price NUMERIC(6,2) NOT NULL, 
    o_price NUMERIC(6,2) NOT NULL, 
    clr_options VARCHAR(30) NULL,
    qty NUMERIC(5,0) NULL
    INDEX (qp_price),
    INDEX (o_price),
    FOREIGN KEY (qp_price) REFERENCES price_list(price_id),
    FOREIGN KEY (o_price) REFERENCES price_list(price_id),
)ENGINE=INNODB

仅供参考,当您碰巧没有特定的数据库环境时, http ://www.dpriver.com/pp/sqlformat.htm 非常有用。

于 2012-12-05T00:22:13.053 回答