2012-03-24 70 views
11

我有兩個SQL語句:H2數據庫CREATE TABLE與約束

CREATE TABLE legs(legid INT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
        playerid1 INT NOT NULL REFERENCES players(playerid), 
        playerid2 INT NOT NULL REFERENCES players(playerid), 
        added TIMESTAMP AS CURRENT_TIMESTAMP NOT NULL); 

ALTER TABLE legs ADD CONSTRAINT distinct_players CHECK(playerid1 <> playerid2); 

我99%肯定,我應該能夠將它們凝結成一個,即:

CREATE TABLE table(... 
        playerid2 INT NOT NULL REFERENCES players(playerid) CHECK(playerid1 <> playerid2), 
        ...); 

不過,我始終得到語法錯誤。 AFAIK,這是約束應該在的地方。

回答

14
CREATE TABLE legs(legid INT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
        playerid1 INT NOT NULL REFERENCES players(playerid), 
        playerid2 INT NOT NULL REFERENCES players(playerid), 
        added TIMESTAMP AS CURRENT_TIMESTAMP NOT NULL, 
        CHECK (playerid1 <> playerid2)); 
+0

檢查約束必須全部位於表底部,不能與列混合,因爲CHECK約束可以混合在PostgreSQL中。 – 2017-04-11 19:20:26