您的位置:首页 > 数据库 > MySQL

MySQL替换(更新)写入 replace into

2018-10-25 21:18 507 查看
  • replace into。
  • MySQL中实现replace into操作方式:
    思路:通过判断插入的记录里是否存在主键索引或唯一索引冲突,来决定是插入还是更新。当出现主键索引或唯一索引冲突时则进行update操作,否则进行insert操作。
    实现:使用 replace into t(filedA, filedB...) values(value1, value2);

来看看下面具体实现过程。

一、准备数据表

CREATE TABLE `demo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`a` tinyint(1) unsigned NOT NULL DEFAULT '0',
`b` tinyint(1) unsigned NOT NULL DEFAULT '0',
`c` tinyint(1) unsigned NOT NULL DEFAULT '0',
`d` tinyint(1) unsigned NOT NULL DEFAULT '0',
`e` tinyint(1) unsigned NOT NULL DEFAULT '0',
`f` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `unq_a_b_c` (`a`,`b`,`c`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

注意:表中存在两处索引,id为主键索引,a,b,c为联合唯一索引。

二、写入初始数据

insert into test.demo(a,b,c,d,e,f) values(1,2,3,1,1,1);

此时存在由abc散列组成唯一索引数据:1,2,3。

三、进一步实现

replace into into demo(a,b,c,d,e,f) values(1,2,3,2,2,2);
5b4
[code]因为已经存在由abc三列组成唯一索引数据:1,1,1,本次又写入demo(a,b,c,d,e,f) values(1,1,1,2,2,2),会造成唯一索引冲突。
因此,会删除掉原来记录,新增一条记录。

replace into字段有primary key字段时,会更新本条记录
replace into字段没有primark key字段,发生唯一索引冲突,会删除原来的记录,新增一条记录

在向表中插入数据的时候,经常遇到这样的情况:
1. 首先判断数据是否存在
2. 如果不存在,则插入
3. 如果存在,则更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql replace into