对,所以代码如下:
CREATE TABLE Seller (
sID INT AUTO_INCREMENT
PRIMARY KEY,
sName CHAR (10),
sAddress CHAR (30)
)ENGINE = INNODB;
CREATE TABLE Sale (
sID INT AUTO_INCREMENT,
iName CHAR(10),
CONSTRAINT sa_pk
PRIMARY KEY (sID, iName),
CONSTRAINT sa_fk1
FOREIGN KEY (sID)
REFERENCES Seller (sID)
ON UPDATE CASCADE,
CONSTRAINT sa_fk2
FOREIGN KEY (iName)
REFERENCES Item (iName)
ON UPDATE CASCADE
)ENGINE = INNODB;
CREATE TABLE Item (
iPrice REAL,
iStock INT,
iName CHAR(10)
PRIMARY KEY,
iDescription CHAR (30)
)ENGINE = INNODB;
CREATE TABLE Copy (
oQuantity INT,
iName CHAR(10),
CONSTRAINT co_pk
PRIMARY KEY (oQuantity, iName),
CONSTRAINT co_fk1
FOREIGN KEY (oQuantity)
REFERENCES Orders (oQuantity)
ON UPDATE CASCADE,
CONSTRAINT co_fk2
FOREIGN KEY (iName)
REFERENCES Item (iName)
ON UPDATE CASCADE
)ENGINE = INNODB;
CREATE TABLE Orders (
oSeller CHAR (10),
oTypes CHAR (10),
oQuantity INT,
oPrice REAL,
oID INT AUTO_INCREMENT
PRIMARY KEY
)ENGINE = INNODB;
CREATE TABLE Customer (
cID INT AUTO_INCREMENT
PRIMARY KEY,
cName CHAR (10),
cAddress CHAR (30)
)ENGINE = INNODB;
我一开始就有drop命令,所以每次运行这个脚本时,除了复制和销售之外,至少所有这些都被删除了。每当我尝试删除它时它会失败,因为它们永远不会被创建我继续得到ERROR 1005(HY000)废话然后无法创建表x。 请帮助我解决这个烦人的问题。焦油!
答案 0 :(得分:1)
在sale
表中,您有
CONSTRAINT sa_fk2 FOREIGN KEY (iName) REFERENCES Item (iName)
ON UPDATE CASCADE
然后,您之后正在创建Item
表。
要创建Copy
表,您需要oQuantity
表中Order
字段的索引。
INDEX `oQty` (`oQuantity`)
将上面的内容添加到Order表可以创建表。
这是sqlfiddle。