MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
来源:互联网 发布:php短信轰炸机源码 编辑:程序博客网 时间:2024/04/25 03:43
REPLACE INTO的用法与INSERT很相似,最终在表中的目的是插入一行新的数据。不同的是,当插入时出现主键或者唯一索引冲突的时候,会删除原有记录,重新插入新的记录。因此,除非表具有主键或者唯一索引,否则使用REPLACE INTO无任何意义。
以下新建了一个表来进行测试,并添加触发检视REPLACE INTO是如何工作的:
CREATE TABLE `replace_into` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `name` char(10) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_uid` (`uid`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=1334 DEFAULT CHARSET=utf8;CREATE TRIGGER `insert_before_trigger` BEFORE INSERT ON `replace_into` FOR EACH ROW insert into `trigger_log` (`id`,`table_name`,`action`) values(NULL,'replace_into','insert_before');CREATE TRIGGER `insert_after_trigger` AFTER INSERT ON `replace_into` FOR EACH ROW insert into `trigger_log`(`id`,`table_name`,`action`) values(NULL,'replace_into','insert_after');CREATE TRIGGER `update_after_trigger` AFTER UPDATE ON `replace_into` FOR EACH ROW insert into `trigger_log`(`id`,`table_name`,`action`) values(NULL,'replace_into','update_after');CREATE TRIGGER `delete_after_trigger` AFTER DELETE ON `replace_into` FOR EACH ROW insert into `trigger_log`(`id`,`table_name`,`action`) values(NULL,'replace_into','delete_after');
插入一些测试数据后,执行REPLACE INTO
[SQL] replace into `replace_into` values (1333,313,'dd')受影响的行: 2时间: 0.036ms可以发现,执行成功后受影响的行数为2,让我们来看看触发器的记录
第一步:尝试插入,但发现唯一性冲突,插入失败
第二步:删除表中唯一性冲突的旧记录
第三步:插入新的行
总结:REPLACE INTO会先删除原有的行,再插入新的行,如果为了偷懒这样写,会导致性能低下。还有一点,由于第三步插入了新的行,如果没有指定自增主键,那么自增ID也会随之改变。
INSERT … ON DUPLICATE KEY UPDATE在mysql 4.1版本以后开始支持,
执行语句:
[SQL] insert into `replace_into` values (NULL,313,'aaaaaaaaaa') ON DUPLICATE KEY UPDATE `name`='asd'受影响的行: 2时间: 0.043ms
看看触发器的记录:
第一步:尝试插入,但发现唯一性冲突,插入失败
第二步:执行更新语句
总结:使用INSERT … ON DUPLICATE KEY UPDATE,可以将原本3条sql语句整合成一条,而且不会造成delete旧数据。
0 0
- MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
- mysql中ON DUPLICATE KEY UPDATE和REPLACE INTO用法
- REPLACE INTO 和 INSERT INTO ... ON DUPLICATE KEY UPDATE SET ...
- replace into 和 insert into *** on duplicate key update
- Mysql中Insert into xxx on duplicate key update和REPLACE INTO使用
- Mysql中Insert into xxx on duplicate key update和REPLACE INTO使用
- Mysql replace into 与 insert into on duplicate key update 死锁和性能测试
- mysql中insert into on duplicate key update 和replace into的区别
- MySql之INSERT INTO…ON DUPLICATE KEY UPDATE详解
- mysql replace into和 insert into ... on duplicate update 区别
- mybatis中使用replace into和 insert INTO … ON DUPLICATE KEY UPDATE批量操作
- insert into replace into 和insert into .. on duplicate key update ..
- INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO 和 INSERT IGNORE INTO
- mysql中的replace into和 on duplicate key update
- INSERT INTO ON DUPLICATE KEY UPDATE 用法
- MYSQL的REPLACE和INSERT ... ON DUPLICATE KEY UPDATE
- Mysql replace into 与 insert into on duplicate key update 的区别
- MySQL的Replace into 与Insert into ..... on duplicate key update ...真正的不同之处
- SVM入门(一)至(三)Refresh
- BigDecimal的应用
- android图像编辑和处理(四)
- [leetcode题后感]combination sum i,ii
- SQL必知必会 笔记 第二十二章 了解高级SQL特性
- MYSQL之REPLACE INTO和INSERT … ON DUPLICATE KEY UPDATE用法
- VC 判断系统是否进入睡眠模式
- Struts2 XML配置详解
- android异步http向外传值
- 赛程安排--基于多边形思想
- 免费OA系统的选择
- Oracle SQL题目及其解答(学生、课程、成绩、教师)
- Berkeley socket 套接字编程详解
- 那些年我们遗忘的Static