0
A
回答
1
检查约束只会阻止将这样的值放入列中。它不会神奇地用默认值替换提供的值。
为了与价值默默替换为空字符串(或空)'active'
你需要一个触发:
create or replace function check_default()
returns trigger
as
$body$
begin
if (new.status is null or new.status = '') then
new.status = 'active';
end if;
return new;
end;
$body$
language plpgsql;
上述触发会赶上这样的东西:
insert into foo (id, active)
values (42,'');
update foo
set active = ''
where id = 42;
你甚至可以扩展该逻辑,以便仅用空白值(' '
)替换所需的值。
虽然有可能在触发动态检索的默认值(以避免在两个地方同样常量)我不会做,对于性能方面的原因。
相关问题
- 1. Perl - 如果字符串为空,则使用0
- 2. 如果参数值为空,则传递字符串
- 3. 如果实体中的字符串为空,则在SQL中使用默认值
- 4. 如果重复,则用空字符串替换行值
- 5. MID的字符串结果为空值
- 6. 一个衬里如果字符串不为空,否则空
- 7. 如果字符串非空,则添加到字符串
- 8. Java/Android:追加多个字符串,如果字符串为空,则跳过
- 9. 如果传递空字符串,则设置默认值MySQL
- 10. 如果数据库中存在空值,则显示字符串
- 11. 使用DEFAULT避免NULL列空字符串
- 12. 如果“w∈{a,b} *”,则允许w为空字符串?
- 13. 如果字符串为空,则跳过行
- 14. 如果在连接公式中为空,则忽略字符串
- 15. SwiftyJSON字符串值为空
- 16. JAXB xjc:如何为字符串生成代码,如果值为空则返回空值?
- 17. c退出,如果字符串为空
- 18. 条件如果字符串为空
- 19. 如果默认值为空并转换为字符串
- 20. 如果查询字符串为空,则返回表中的所有值
- 21. 如果一个字符串为空,则将2个字符串转换为浮点后无法获得结果
- 22. SQL:如果字段为空,则返回空字符串,否则将其转换为数字
- 23. 如果字符串为空赋值给变量
- 24. AngularJS - NG-如果检查字符串值为空
- 25. C# - 禁用按钮如果字符串为空或有空白?
- 26. 如果字符串数为偶数,则返回“偶数”,如果字符串数为奇数,则返回“奇数”
- 27. 正则表达式为空字符串
- 28. 字符串长期结果空值
- 29. 为什么Select语句如果不返回结果则不会分配空字符串或空值?
- 30. 使用XslCompiledTransform获取html作为字符串。结果为空
总之:你不能。空字符串仍然是varchar列的有效值。 NULL不是一个值。您可以添加一个限制,禁止字符串长度<1。 – wildplasser
目前我使用检查NOT NULL CHECK(status <>'')DEFAULT'active'' –
看起来好,它会阻止插入空字符串。如果你不想要空字符串,你(或你的前端程序)不应该首先插入它们。 – wildplasser