数据初始化:有则更新无则添加(mySql,oracle)

本文介绍在Oracle和MySQL中实现数据初始化的方法,包括如何使用merge和on duplicate key update语句来确保数据的一致性和完整性。通过具体示例展示了如何避免因唯一键约束引发的错误。

数据初始化:有则更新无则添加(mySql,oracle)

2018-02-01

 

1 Orcale

create table table1(id varchar2(100) primary key,name varchar2(1000),address varchar2(1000));

-- 执行两次,会报  [Err] ORA-00001: unique constraint (PBOC.SYS_C0014610) violated
insert into table1(id,name,address)values('01001','影子','河北') ;

-- 查看constraint
SELECT UC.OWNER,
       UC.CONSTRAINT_NAME,
       UC.CONSTRAINT_TYPE,
       UC.TABLE_NAME,
       UCC.COLUMN_NAME,
       UC.SEARCH_CONDITION,
       UC.R_CONSTRAINT_NAME
FROM USER_CONSTRAINTS UC
  INNER JOIN USER_CONS_COLUMNS UCC
    ON (UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME) and UC.TABLE_NAME='TABLE1';


-- merge有则更新,无责插入
merge into table1 t1  
using (select '01001' id,'影子2' name,'辽宁' address from dual) t2  
on (t1.id = t2.id)  
when matched then  
     update set t1.name = t2.name, t1.address = t2.address  
when not matched then  
     insert values (t2.id, t2.name,t2.address);  

select * from table1;

drop table table1;

 

2 Sql

create table table1(id varchar(100) primary key,name varchar(1000),address varchar(1000));

-- 执行两次,会报  [Err] 1062 - Duplicate entry '01001' for key 'PRIMARY'
insert into table1(id,name,address)values('01001','yingzi','hebei') ;

-- 无责插入(返回:受影响的行: 1),有则更改(返回:受影响的行: 2)
INSERT INTO  table1(id,name,address) VALUES ('01001','yingzi2','hunan')  ON DUPLICATE KEY UPDATE name='yingzi2',address='hunan';

select * from table1;

drop table table1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值