我一直在尝试在表上创建外键来引用价格表,这是我到目前为止的语法,这会产生错误,
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列...我该怎么做?
答案 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非常有用,如果您没有碰巧让特定的数据库环境站起来。