<
>

Mysql 原生语句中save or update 的写法汇总

2019-01-05 09:58:47 来源:易采站长站 作者:于海丽

2.使用一般的insert语句插入name=zhangsan的数据,报主键冲突。但是换成replace into…语句则没问题:


replace into `test_tab` (`name`,`age`) values ('zhangsan',30) ;

------------
受影响的行: 2
时间: 0.009s

3.结果如下:


name|age
:—-|:—
zhangsan|30
lisi|30

  对于操作结果来说,很像是save or update,但是实现方式与INSERT的“DUPLICATE KEY UPDATE”关键字不同。当使用replace into语句时,对于重复的数据,是直接删除,然后再插入新数据的。所以它的更新其实不是update,而是delete->insert。大多数情况下,使用replace into完成更新操作并无问题,但是有一种场景必须特别注意:
•当被更新的表,存在insert,update,和delete触发器时,使用replace语句必须特别小心。因为按照业务逻辑,更新完数据后,应该触发update触发器,但是使用replace语句的话,会触发delete和insert触发器,如果update触发器有一些特殊操作(比如记录操作日志)的话,使用replace会导致业务逻辑混乱。

所以当被更新表存在触发器的场景时,使用INSERT的“DUPLICATE KEY UPDATE”关键字更合适。

以上就是本文所述的全部内容了,希望能让大家更好的理解mysql中的save和update语句。

您可能感兴趣的文章:

Mysql 数据库死锁过程分析(select for update)MySQL 从一张表update字段到另外一张表中MySQL中ADDDATE()函数的使用教程mysql中You can’t specify target table for update in FROM clause错误解决方法php+MySQL判断update语句是否执行成功的方法安装Mysql5.7.10 winx64出现的几个问题汇总64位Win10系统安装Mysql5.7.11的方法(案例详解)Mysql5.7.11在windows10上的安装与配置(解压版)Window10下安装 mysql5.7图文教程(解压版)mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法
暂时禁止评论

微信扫一扫

易采站长站微信账号