2011-11-09 101 views
0

創建表我試圖運行下面的SQL腳本:得到錯誤,而在MySQL

CREATE TABLE part 
(Partno CHAR(4) PRIMARY KEY, 
Partdesc VARCHAR(20), 
Onhand INTEGER, 
Partclass CHAR(2) check (Partclass IN ('AP','HW','KI','SP')), 
Unitprice DECIMAL(6,2) 
); 


CREATE TABLE salesrep 
(Srepno  CHAR(3), 
Srepname VARCHAR(25), 
Srepstreet VARCHAR(30), 
Srepcity VARCHAR(15) NOT NULL, 
Srepprov VARCHAR(3) NOT NULL, 
Sreppcode VARCHAR(6) NOT NULL, 
Totcomm DECIMAL(8,2), 
Commrate DECIMAL(3,2), 
CONSTRAINT pkslsrep PRIMARY KEY (Srepno) 
); 


CREATE TABLE customer 
(Custno  CHAR(3), 
Custname VARCHAR(25) NOT NULL, 
Custstreet VARCHAR(30) NOT NULL, 
Custcity VARCHAR(15) NOT NULL, 
Custprov VARCHAR(3) NOT NULL, 
Custpcode VARCHAR(6) NOT NULL, 
Disc  DECIMAL(3,1), 
Balance DECIMAL(7,2), 
Credlimit DECIMAL(5), 
Srepno  CHAR(3), 
CONSTRAINT pkcustno PRIMARY KEY (Custno), 
CONSTRAINT fksrepno FOREIGN KEY (Srepno) REFERENCES salesrep(Srepno) 
); 


CREATE TABLE orders 
(Orderno CHAR(5) UNIQUE NOT NULL, 
Orderdate DATE, 
Custno CHAR(3) NOT NULL, 
CONSTRAINT fkordercust FOREIGN KEY (Custno) REFERENCES customer (Custno) 
); 


CREATE TABLE orderprod 
(Orderno CHAR(5), 
Partno  CHAR(4), 
Orderqty INTEGER CHECK (Orderqty>0), 
Orderprice DECIMAL(7,2), 
CONSTRAINT pkorderprod PRIMARY KEY (Orderno, Partno), 
CONSTRAINT fkordprdord FOREIGN KEY (Orderno) REFERENCES orders(Orderno), 
CONSTRAINT fkordprdpar FOREIGN KEY (Partno) REFERENCES part(Partno) 
); 


CREATE TABLE invoice 
(Invno  CHAR(6), 
    Invdate DATE, 
    Orderno CHAR(5), 
    CONSTRAINT fkinvoice FOREIGN KEY (Orderno) REFERENCES orders(Orderno), 
    CONSTRAINT pkinvoice PRIMARY KEY (Invno) 
); 


CREATE TABLE invprod 
(Invno  CHAR(6), 
    Partno  CHAR(4), 
    Shipqty INTEGER CHECK (Shipqty>0), 
    CONSTRAINT fkinvoice FOREIGN KEY (Invno) REFERENCES invoice(Invno), 
    CONSTRAINT fkpart FOREIGN KEY (Partno) REFERENCES part(Partno) 
); 

DROP TABLE invprod; 
DROP TABLE invoice; 
DROP TABLE orderprod; 
DROP TABLE orders; 
DROP TABLE customer; 
DROP TABLE salesrep; 
DROP TABLE part;* 

我不能創建表invprod。我收到錯誤:69無法創建表'sh.invprod'(errno:121)。我在這個腳本中犯了什麼錯誤?

+0

如果您執行'show innodb status',則在輸出中間埋入一個更詳細的「最後一個錯誤」部分,該部分應該更好地解釋爲什麼無法創建表。 –

+0

您使用的是哪個版本的MySQL?我剛剛在5.1.57上試過了,它運行良好 – DaveyBoy

+0

你的腳本對我來說工作正常,除了最後刪除'*'。你使用的是什麼版本的SQLite? – Dave

回答

2

CONSTRAINT fkinvoice已被定義爲CREATE TABLE invoice的一部分。約束名稱應該像表或索引一樣是唯一的。

+0

-1:鍵名是每個表。在一個表中具有'fkinvoice'並不妨礙您在另一個表中擁有相同的密鑰名稱。 –

+0

是的。錯誤121是重複鍵錯誤。 –

+0

@Marc B:如果給出了'CONSTRAINT symbol'子句,'symbol'值在數據庫中必須是唯一的。請參閱:http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html – Raihan