2011-11-09 18 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

関連する問題