回答

收藏

SQL列定义:默认值和非null冗余吗?

技术问答 技术问答 44 人阅读 | 0 人回复 | 2023-09-13

我已经多次看到以下内容了create / alter DDL语句中定义列的语法:
7 e; }( n. }/ s, B* }" S* ?4 YALTER TABLE tbl ADD COLUMN col VARCHAR(20) NOT NULL DEFAULT "MyDefault"问题是:由于指定了默认值,是否还需要指定该列不应接受NULL?换句话说,DEFAULT是否不使NOT NULL变得多余?
$ l2 p5 ?1 l  L/ N* J% L                                                               
7 c( C4 ^2 [" ], ~6 a. F    解决方案:                                                                # _% V9 b6 g2 e+ {, y- i
                                                                DEFAULT是在insert / update如果句子中没有显式值,将插入值。让我们假设你的DDL没有NOT NULL约束:
' H1 p- R0 \7 @ALTER TABLE tbl ADD COLUMN col VARCHAR(20) DEFAULT 'MyDefault'然后你可以发表这些声明$ }2 v9 D, p4 u2 i5 M! i0 ~. x' ]( a
-- 1. This will insert 'MyDefault' into tbl.colINSERT INTO tbl (A,B) VALUES (NULL,NULL);-- 2. This will insert 'MyDefault' into tbl.colINSERT INTO tbl (A,B,col) VALUES (NULL,NULL,DEFAULT);-- 3. This will insert 'MyDefault' into tbl.colINSERT INTO tbl (A,B,col) DEFAULT VALUES;-- 4. This will insert NULL into tbl.colINSERT INTO tbl (A,B,col) VALUES (NULL,NULL,NULL);另外,你也可以根据SQL-1992标准使用DEFAULTinUPDATE语句:' ]$ U6 a" {* b5 v$ H: o9 G
-- 5. This will update 'MyDefault' into tbl.colUPDATE tbl SET col = DEFAULT;-- 6. This will update NULL into tbl.colUPDATE tbl SET col = NULL;请注意,并非所有数据库都支持这些数据SQL标准语法NOT NULL约束将导致statement出错4,6,而1-3.5仍然有效statement。所以,请回答你的问题:不,它们不是多余的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则