SQL 有数据更新,没有数据插入 ON DUPLICATE KEY  比  REPLACE 好用多了,优势和注意点也多!

SQL: ON DUPLICATE KEY  比  REPLACE 好用多了,优势和注意点也多!


REPLACE  

 

实际操作是:

根据索引判断都否存在唯一数据,没有就新增;

如果有索引数据,就先删除,在新增。

随着数据不断增多,频繁删除索引数据,操作速度会越来越慢。

 

应用场景:

针对一行或多行数据,进行数据新增 或 替换。(都是全新的数据,可以理解为 “格式化安装” )

如果担心数据被污染,需要以目前数据为基准,可以使用 replace 操作

 

ON DUPLICATE KEY 

 

实际操作是:

根据索引判断都否存在唯一数据,没有就新增;

如果有索引数据,更新update 后面的数据。

并没有频繁操作索引。

 

应用场景:

针对一行或多行数据,进行数据新增 或 指定字段更新更新操作。(新增就是全新数据,更新就是指定的字段替换为新数据,可以理解为 “新增数据,并且打补丁” )

如果希望修改部分字段数据,也可以更新全字段数据。但不修改索引的操作。可以使用         INSERT INTO    ON DUPLICATE KEY     UPDATE 操作。

 

更多优点:

单个操作:

例如:

INSERT INTO air_ticket_ow_meituan (`aaa`, `bbb`, `ccc`) 
        VALUES (111,222,333) 
        ON DUPLICATE KEY 
        UPDATE `bbb`=888, `xxx`=999, `zzz`='kkkkkk' 

可以实现新增内容 或 更新内容 不同字段 不同内容。可以更新 更多的数据状态!

 

多个:

例如 1:

INSERT INTO air_ticket_ow_meituan (`aaa`, `bbb`, `ccc`) 
        VALUES (111,222,333) ,
        (444,555,666)   
        ON DUPLICATE KEY 
        UPDATE `bbb`=888, `xxx`=999, `zzz`='kkkkkk' 

可以实现 多条 新增内容 或 更新内容 不同字段 不同内容。可以更新 更多的数据状态!

但是这种更新方式,字段是固定的值。

 

例如 2:

INSERT INTO air_ticket_ow_meituan (`aaa`, `bbb`, `ccc`) 
        VALUES (111,222,333) ,
        (444,555,666)   
        ON DUPLICATE KEY 
        UPDATE `bbb`=VALUES(bbb), `ccc`=VALUES(ccc), `state`=1 , `updateTime`=NOW()

可以实现 多条 新增内容 或 更新内容 不同字段 不同内容。可以更新 更多的数据状态!

这种模式更新,可以实现 指定的部分字段动态更新,指定的其他字段固定更新。非常神奇!

 

注意事项:

这样做虽然方便。但是同样的 SQL 执行第二遍,会带来不同的结果!

因为二次执行针对 前一次的新增数据是更新操作!

所以一定要选择好应用场景!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值