您的位置
主页 > 网站技术 > 数据库 > » 正文

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

来源: 锦尚中国 点击:


INSERT
    [INTO] tbl_name
    [PARTITION (partition_name,...)]
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

或者:

复制代码 代码如下:


INSERT
    [INTO] tbl_name
    [PARTITION (partition_name,...)]
    [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

可见,还是原来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官方文档中提供标准的语法:

复制代码 代码如下:




首页  - 关于站长圈  - 广告服务  - 联系我们  - 关于站长圈  - 网站地图  - 版权声明