暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库表有默认值情况下的insert和merge体验

原创 qabel12 2022-12-13
5976

达梦数据库表有默认值情况下的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) ;

q1.png

下面这样是执行成功的:

q2.png

结论:

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

评论