MYSQL教程MySQL的Replace into 与Insert into on duplicate key
《MYSQL教程MySQL的Replace into 与Insert into on duplicate key update真正的不同之处》要点: 1 Replace into ... 1.1 录入原始数据 mysql> use test; Database changed mysql> mysql> CREATE TABLE t1 SELECT 1 AS a,'c3' AS b,'c2' AS c; ? mysql> INSERT INTO t1 SELECT 2,'2','3'; ? 1.2 开始replace操作 【】看到这里,replace,看到这里,a=2的记录中c字段是空串了, 1.3 但是不知道对主键的auto_increment有无影响,接下来测试一下: mysql> insert into t1(b,c) select 'r4','r5'; Query OK,1 row affected (0.05 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from t1; +---+----+----+ | a | b | c | +---+----+----+ | 1 | c3 | c2 | | 2 | a | | | 3 | r2 | r3 | | 5 | r4 | r5 | +---+----+----+ 4 rows in set (0.00 sec) ?MYSQL应用 【】从这里可以看出,新的自增不是从4开始,而是从5开始,就表示一个repalce操作,主键中的auto_increment会累加1. 当没有key时,replace相当于普通的insert. 2.1 ok,再来看Insert into ..... on duplicate key update, mysql> insert into t1(a,b) select '3','r5' on duplicate key update b='r5'; Query OK,2 rows affected,1 warning (0.19 sec) Records: 1 Duplicates: 1 Warnings: 1 mysql> select * from t1; +---+----+----+ | a | b | c | +---+----+----+ | 1 | c3 | c2 | | 2 | a | | | 3 | r5 | r3 | | 5 | r4 | r5 | +---+----+----+ 4 rows in set (0.00 sec) 【】a=5时候,原来的c值还在,这表示当key有时,只执行后面的udate操作语句.MYSQL应用 2.2 再检查auto_increment情况. mysql> insert into t1(a,1 warning (0.19 sec) Records: 1 Duplicates: 1 Warnings: 1 mysql> select * from t1; +---+----+----+ | a | b | c | +---+----+----+ | 1 | c3 | c2 | | 2 | a | | | 3 | r5 | r3 | | 5 | r4 | r5 | +---+----+----+ 4 rows in set (0.00 sec) mysql> insert into t1(b,c) select 'r6','r7'; Query OK,1 row affected (0.19 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from t1; +---+----+----+ | a | b | c | +---+----+----+ | 1 | c3 | c2 | | 2 | a | | | 3 | r5 | r3 | | 5 | r4 | r5 | | 7 | r6 | r7 | +---+----+----+ 5 rows in set (0.00 sec) 【】从这里可以看出,新的自增不是从6开始,而是从7开始,就表示一个Insert .. on deplicate udate操作,主键中的auto_increment也跟replace一样累加1.MYSQL应用 2.3 再看下当没有key的时候,insert .. on deplicate update的情况 mysql> insert into t1(a,b,c) select '33','r5','c3' on duplicate key update b='r5'; Query OK,1 row affected,1 warning (0.23 sec) Records: 1 Duplicates: 0 Warnings: 1 mysql> select * from t1; +----+----+----+ | a | b | c | +----+----+----+ | 1 | c3 | c2 | | 2 | a | | | 3 | b5 | r3 | | 5 | r4 | r5 | | 7 | r6 | r7 | | 9 | s6 | s7 | | 33 | r5 | c3 | +----+----+----+ 7 rows in set (0.00 sec) 看a=33的记录,ok,全部录入了.MYSQL应用 3 总结从上面的测试结果看出,相同之处: 个人倾向与用Replace.MYSQL应用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |