达梦数据库表有默认值情况下的insert和merge体验
描述:
使用达梦数据库,分别使用insert和merge来插入数据实验。
--查看数据库版本
select * from v$version;
DM Database Server 64 V8
DB Version: 0x7000c
--创建t1表
create table t1(id int,age int default 18 not null);
--查询2条数据,age没给值,按默认值填充18
insert into t1(id) values(1),(3);
select * from t1;
ID AGE
1 18
3 18
--创建t2表
create table t2(id int,age int);
--查询一条数据,没给age赋值
insert into t2(id) values(2);
select * from t2;
ID AGE
2
--使用merge来插入数据到t1表,比如下面操作,insert部分指定插入age字段数据,报违反非空约束错误,age字段自动不会使用默认值
merge into t1 a
using (select * from t2) b
on (a.id=b.id)
when matched then
update set a.age=b.age
when not matched then
insert (a.id,a.age)
values(b.id,b.age)
;
--使用merge来插入数据到t1表,比如下面操作,insert部分没有指定插入age字段数据,插入会成功,age字段会自动使用默认值
merge into t1 a
using (select * from t2) b
on (a.id=b.id)
when matched then
update set a.age=b.age
when not matched then
insert (a.id)
values(b.id)
;

下面这样是执行成功的:

结论:
- 单独insert语句,表字段默认值是生效的;
- 使用merge语句,更新部分或者插入部分,如果指定了字段,则会使用源数据来更新和插入,目标表字段的默认值约束是不使用的。
- 使用merge语句,更新部分或者插入部分,如果没有指定字段,比如上面不指定age字段,则age字段会使用目标表字段本身的默认值约束的。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




