PostgreSQL布尔列默认值及简化条件查询的含义确认
PostgreSQL布尔列默认值及简化条件查询的含义确认
嘿,我来帮你把这两个问题理清楚:
关于简化查询的含义
你猜的完全没错!在PostgreSQL里,SELECT * FROM table WHERE is_active这种写法,完全等价于SELECT * FROM table WHERE is_active = TRUE。这是符合SQL标准的简化写法——布尔类型本身就是一个合法的条件表达式,直接使用列名时,只有当列值为TRUE的行才会被匹配,FALSE和NULL都会被过滤掉。
关于布尔列的默认值
这里要注意:PostgreSQL的布尔列并不会默认设置为TRUE。如果创建表时没有显式指定DEFAULT子句,布尔列的默认值是NULL。举个例子:
CREATE TABLE your_table ( id INT, is_active BOOLEAN );
当你插入新行却不给is_active赋值时,它的值会是NULL,而不是TRUE。只有当你建表时明确声明默认值,比如:
CREATE TABLE your_table ( id INT, is_active BOOLEAN DEFAULT TRUE );
这时候新插入的行才会自动把is_active设为TRUE。
如果你的查询WHERE is_active能返回符合预期的结果,大概率是因为表中现有数据的is_active要么是TRUE,要么你在插入时都显式指定了这个值,但这并不是PostgreSQL的默认行为哦。
备注:内容来源于stack exchange,提问作者Chicken Sandwich No Pickles




