在使用PostgreSQL(或其他一些支持它的数据库)而不是TEXT
时,最好使用character varying(NN)
数据类型,因为没有性能损失和最大可能的长度可以通过删除和重新应用约束来调整,而不会影响使用该字段的任何视图等。
但是,如何应用此约束(SQL代码)?
答案 0 :(得分:18)
创建表格时,您可以执行此类操作,
CREATE TABLE names (
name text CHECK namechk (char_length(name) <= 255)
)
(namechk
只是约束的名称)
例如ALTER TABLE
也是如此:
ALTER TABLE names
ADD CONSTRAINT namechk CHECK (char_length(name) <= 255);
答案 1 :(得分:3)
这里有三件事:
text
+检查约束或varchar(N)
?数目:
varchar(N)
将更加明显,而来自其他数据库的开发人员将会看到什么。但是,正如您所说,以后更难更改。请记住,应用新的/修改的检查约束不是免费的 - 必须根据约束检查所有现有行,因此在大型表上需要大量读取。CONSTRAINT name CHECK (condition)
(或只是CHECK (condition)
,而Postgres本身会在CREATE TABLE
语句中提出一个名称,ALTER TABLE table_name ADD CONSTRAINT name CHECK (condition);
。 condition
将使用适当的string function表达,例如char_length(foo) <= 255
。ALTER TABLE foo DROP CONSTRAINT ck_bar_length; ALTER TABLE foo ADD CONSTRAINT ck_bar_length CHECK ( char_length(bar) <= 100 );
我实际上无法想到命名约束的缺点。