MySQL的替换和插入到重复密钥更新中
1替换成…
1.1输入原始数据
使用测试;
数据库的改变
MySQL >
MySQL >创建表T1选择1作为,'c3'as B,'c2;
修改表T1改变一个主关键字auto_increment;
查询OK,1行受影响(0.03秒)
记录:1个重复:0个警告:0
MySQL >插入T1选择2,2',3';
查询OK,1行受影响(0.01秒)
记录:1个重复:0个警告:0
MySQL >插入T1(B,C)select'r2 ','r3;
查询OK,1行受影响(0.08秒)
记录:1个重复:0个警告:0
1.2开始替换操作
MySQL >更换为T1(A,B)的值(2,A);
查询OK,2行受影响(0.06秒)
{替换,在这里看到,在这里看到,a = 2 C字段的记录是空的,
因此,当与密钥发生冲突时,替换与覆盖相关的字段,以及其他字段填充默认值。它可以解释为删除重复密钥记录、插入新记录、删除原始记录和插入操作。
1.3但不知道是否该auto_increment主要有影响,然后测试:
MySQL >插入T1(B,C)select'r4 ','r5;
查询OK,1行受影响(0.05秒)
记录:1个重复:0个警告:0
从T1选择*;
+ + + + +
A B C | | | |
+——+——+——+
| 1 | | | C2 C3
| 2 |一| |
| 3 | R2 R3 | |
| 5 | R4 | R5 |
+ + + + +
4行(0秒)
{ }你可以从这里看到,新的自我提高不从4开始,但从5年初开始,它代表了一种代替操作,并在关键的auto_increment将总计达1。
因此,摘要如下:
更换:
如果没有键,则替换相当于公共插入。
当有键时,可以理解为键删除,重复记录中的键保持不变,原始删除记录,插入新记录,新记录值只会在替换语句中输入字段值,在替换语句中没有其他字段,将自动填充默认值。
2.1好,看看插入到…关于重复密钥更新,
MySQL >插入T1(A,B)选择3,'r5对复制的钥匙。
查询OK行,2个受影响,1个警告(0.19秒)
记录:1个重复:1个警告:1
从T1选择*;
+ + + + +
A B C | | | |
+ + + + +
| 1 | | | C2 C3
| 2 |一| |
| 3 | R5 | R3 |
| 5 | R4 | R5 |
+ + + + +
4行(0秒)
{ }在= 5,C的原始价值仍然存在,这意味着当关键是有时候,只有增加产品运行以下语句执行。
2.2检查auto_increment情况再次。
MySQL >插入T1(A,B)选择3,'r5对复制的钥匙。
查询OK行,2个受影响,1个警告(0.19秒)
记录:1个重复:1个警告:1
从中选择;
+——+——+——+
A B C | | | |
+ + + + +
| 1 | | | C2 C3
| 2 |一| |
| 3 | R5 | R3 |
| 5 | R4 | R5 |
+ + + + +
4行(0秒)
MySQL >插入T1(B,C)select'r6 ','r7;
查询OK,1行受影响(0.19秒)
记录:1个重复:0个警告:0
从T1选择*;
+——+——+——+
A B C | | | |
+ + + + +
| 1 | | | C2 C3
| 2 |一| |
| 3 | R5 | R3 |
| 5 | R4 | R5 |
| 7 | R6 R7 | |
+——+——+——+
5行(0秒)
从这里我们可以看到,新的自我增量不是从6,而是从7。这意味着在deplicate增加产品操作的插入。在关键的auto_increment也是1。作为替代。
2.3再次,当没有键时,插入…在deplicate更新
MySQL >插入T1(A,B,C)选择了手脚,'r5 ','c3'on;
查询OK行,1受影响,1警告(0.23秒)
记录:1个重复:0个警告:1
从T1选择*;
+ + + + +
A B C | | | |
+ + + + +
| 1 | | | C2 C3
| 2 |一| |
| 3 | B5 | R3 |
| 5 | R4 | R5 |
| 7 | R6 R7 | |
| 9 | S6 | S7 |
| 33 | R5 | C3 |
+ + + + +
7行(0秒)
查看a = 33记录,OK,所有输入。
上面3个测试结果的摘要显示了相似之处:
(1)当没有键时,替换与插入相同。在deplicate更新。
(2)当有键、主键被保留,和auto_increment自动+ 1
区别是:键替换为删除旧记录,并记录新记录,因此所有原始记录将被删除,此时,如果不是整个字段的替换语句,一些原始示例如C字段的值将自动填充为默认值。
和插入。deplicate只更新执行SQL更新标签后,这相当于从图像的一个简单的更新语句。
但事实上,根据我的推测,如果它是一个简单的语句,auto_increment不会+ 1,应该先删除,然后插入操作,只保留所有领域除了在更新的域插入后。
所以他们之间只有一个区别。插入…在deplicate更新保留所有领域的旧的价值观,然后盖上,然后插在一起,而取代不保留旧值和新值,直接删除插入。
从底部的执行效率,替代比deplicate更新插入要有效得多,但在写作领域取代,应写防止老场数据被删除。
个人倾向与替换的使用。