sql 中 default 约束用法_sql 中 default 约束设置默认值指南

老实说,当我接手一个项目时,我对 DEFAULT 参数有点困惑。
当时表结构是老王写的,有些字段的默认值设置得很随意。
例如,用户表的状态字段默认设置为“审核待定”。
结果后来我发现系统总是显示很多用户在等待业务伙伴的评论,这是一个非常尴尬的情况。

有趣的是,如果使用得当,DEFAULT 参数可以节省很多麻烦。
以create_at为例。
最近电商系统重组时,给所有表添加了DEFAULT CURRENT_TIMESTAMP。
以前,手动输入数据时,有些人总是忘记填写时间,但现在跳过了这一步。
但有一个缺陷。
MySQL 和 PostgreSQL 函数的编写方式不同。
MySQL 使用 CURRENT_TIMESTAMP,而 PostgreSQL 必须重写为 NOW()。
必须记住这一点。

状态字段是DEFAULT的杀手锏。
例如,在我以前工作的物流系统中,订单状态默认为“待发货”。
后来,用户发现订单状态随机跳动。
更改设计后,状态字段当设置为“正常”或“活动”并与 NOTNULL 一起使用时,效果是立即的。
记得有同事在测试时不小心注释掉了NOTNULL,导入批量数据时系统崩溃了。
我当时真想打他。

数字字段通常应该小心。
我见过有人把库存数量默认设置为0,但是当商家进行促销时,库存实际上显示为0,我认为系统缺货了。
后来,为了解决这个混乱,我转而使用触发器来动态更新库存。
说白了,最好将产品列表之类的字段留空,在业务逻辑真正运行时设置值。

更新原始值时遇到了一个大洞。
更改旧表并使用 ALTER TABLE ...之后,我忘记将 SET DEFAULT 添加到 ALTER COLUMN 命令中以更改默认状态值,并直接将 DEFAULT 'inactive' 写入。
结果,系统崩溃了。
查资料发现有些数据库(例如Oracle)需要SET DEFAULT来修改默认值。
这不应掉以轻心。
所以在换表之前,我会复制一下并进行小范围的测试。

注意文本字段的长默认值。
曾经,评论字段的默认值设置为“请输入评论”。
结果,当用户上传文档时;默认值会覆盖所有内容。
虽然只是一个边缘问题,但却足以让人头疼。
当时不明白为什么,后来查了资料,有的数据库显示的是默认值;我发现对固定值的特殊处理,特别是对于很长的文本。

我没有亲自测试过所有数据库的差异。
比如SQLite的写法就和MySQL完全不同。
请注意,MySQL 使用 CURRENT_TIMESTAMP 而 PostgreSQL 使用 NOW() 来存储数据。
不过,建议使用前先查看目标数据库的文档。

sql语句 给表增加一列并设置默认值

坦率地说,为字段添加默认值和使用 SQL 条件运行查询是两件不同的事情,但两者都可以在某些场景下解决您的问题。

我们先来说说最重要的事情。
ALTER TABLE ... ADD COLUMN ... DEFAULT 0。
该语句直接将默认值0分配给表结构中的新列Col1 不管你输入什么,如果为空,就会自动补0。
去年,我们运营了一个电子商务系统。
添加此值比每次手动输入 0 容易 1 00 倍。
另一点是,CASE WHEN... 查询会查找 account_id 为空或 NULL 的记录。
这个逻辑无法用默认值解决,但可以重写为 UPDATE account SET account_id = 'empty' WHERE account_id IS NULL OR account_id = '';还有另一个重要细节。
Oracle 正确地为 StuSex 写入了默认的“男性”,但 StuDept 为空,没有默认值。
关于这一点,您应该仔细阅读文档。

我原本以为ALTER TABLE可以使用默认值直接应用查询逻辑,但后来我意识到这是错误的,需要单独操作。
等等,还有别的事。
用技术术语来说,这称为雪崩效应。
事实上,前面的一点点延迟就会让后面的一切停止。
例如,如果同时添加许多具有默认值的列,数据库可能会停滞几分钟。

下次添加默认值时,我们建议您首先在测试环境中运行 ALTER 语句,而不是直接在生产环境中运行。

SQL如何使用 alter column语句添加字段的默认值(defualt)?

是的,这就是问题所在。
在 SQLDeveloper 中设置默认值很简单。

1 .打开 SQLDeveloper 并连接到数据库。
2 . 找到该表并右键单击进行编辑。
3 . 选择字段并输入默认值。
4 . 单击确定并完成。

你自己看看。
您还有其他问题吗?