<
>

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

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

可见,还是原来insert语句的写法。
 
举个栗子:

1.使用刚才新建的test_tab表,此时表中的数据如下:


name|age
:—-|:—
zhangsan|24

2.使用主键相同的insert语句,仍然会duplicate key错误


insert into `test_tab` (`name`,`age`) values ('zhangsan',50) ;
------------
[Err] 1062 - Duplicate entry 'zhangsan' for key 'PRIMARY'

3.对刚才的insert语句添加 on duplicate key update … 关键字:


insert into `test_tab` (`name`,`age`) values ('zhangsan',50) 
ON DUPLICATE KEY UPDATE `age`=50 ;

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


4.此时主键为'zhangsan'的数据,age字段已被更新:


name|age
:—-|:—
zhangsan|50

5.当然,如果主键不冲突,效果跟一般插入语句是一样的:


insert into `test_tab` (`name`,`age`) values ('lisi',30) 
ON DUPLICATE KEY UPDATE `age`=30 ;

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


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

不存在则插入,存在则更新,其二(使用replace语句实现)

   save or update 在mysql中还有另一种实现,即replace into语句,它用起来有点像Oracle的Merge。判断数据重复的逻辑依然是主键或者唯一键冲突。Mysql官方文档中提供标准的语法:


REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    [PARTITION (partition_name,...)]
    [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

或:


REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    [PARTITION (partition_name,...)]
    SET col_name={expr | DEFAULT}, ...

或:


REPLACE [LOW_PRIORITY | DELAYED]
    [INTO] tbl_name
    [PARTITION (partition_name,...)] 
    [(col_name,...)]
    SELECT ...

 
举个栗子:

1.仍然使用上面的test_tab表的数据,此时数据如下


name|age
:—-|:—
zhangsan|50
lisi|30
暂时禁止评论

微信扫一扫

易采站长站微信账号