有没有为PostgreSQL和SQLite数据库添加表约束的通用语法?

时间:2017-03-06 02:02:21

标签: sql database postgresql sqlite

我有一个现有的表,我想在表中添加一个表级CHECK约束。

在PostgreSQL中,以下内容有效:

ALTER TABLE mytable
ADD CONSTRAINT myconstraint
CHECK a != b

在SQLite中,以下内容有效:

ALTER TABLE mytable
ADD myconstraint
CHECK a != b

然而,SQLite版本并不适用于PostgreSQL,反之亦然;它们因语法错误而失败。这样做的语法是否兼容?

我正在使用PostgreSQL 9.6.1和SQLite 3.14.0。

2 个答案:

答案 0 :(得分:1)

SQLite命令添加一个名为myconstraint的列,没有数据类型,列约束为CHECK a != b(需要括号才有效)。

SQLite的ALTER TABLE无法添加表约束。 (alternative的便携性更低。)

答案 1 :(得分:0)

我认为使用alter table add <constraint>并不常见。一个数据库需要关键字constraint,另一个数据库不允许。

您可以将此作为基于列的约束吗?两个数据库都接受:

create table t (
    x int check (x > 0)
);

您应该能够更改现有列或添加具有类似语法的新列。