问题 H2数据库CREATE TABLE有约束


我有两个SQL语句:

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,这是约束的所在。


3705
2018-03-24 13:23


起源



答案:


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));

14
2018-03-24 13:26



检查约束必须全部位于表的底部,并且不能与列混合,因为CHECK约束可以在PostgreSQL中混合。 - Kent Johnson


答案:


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));

14
2018-03-24 13:26



检查约束必须全部位于表的底部,并且不能与列混合,因为CHECK约束可以在PostgreSQL中混合。 - Kent Johnson