如何修复此语法以使其工作?

时间:2012-12-05 00:09:35

标签: mysql sql foreign-keys create-table

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

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表的price列,这是根据我在衬衫表上的那些列中放入的数字。例如,

如果我这样做

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')

S-L圆领T恤将在价格列的第1和第2行显示价格,因为它链接到price_list表的price_id列...我该怎么做?

1 个答案:

答案 0 :(得分:1)

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

另外,我在14.6.4.4. FOREIGN KEY Constraints发现了关于MySQL 5.1的评论:

  

确保您已为表1和表2的引用列编制索引   分别见表1和表2。如果你不这样做,错误“#1005 -   无法创建表'前景'(错误号: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非常有用,如果您没有碰巧让特定的数据库环境站起来。