T086ѧϰ�� | վ��ѧԺ | �����ĵ� | ���� | Ъ���� | IP��ַ��ѯ | �������� | ���ջ��� | �����ֵ� | ���ù��� | ������Ϣ��ѯ

MySQL����ʹ��"replace into"

�� ����ʱ�䣺2013-10-31 | ���壺�� �� С��
[����]MySQL �� SQL �кܶ���չ����Щ�������ܷ��㣬����һЩ������֮�������������⣬������һЩ����֮���ĸ����ã����� REPLACE INTO���ܶ�ʹ�� REPLACE INTO �ij�����ʵ������Ҫ���� INSERT INTO �� ON DUPLICATE KEY U...

MySQL �� SQL �кܶ���չ����Щ�������ܷ��㣬����һЩ������֮�������������⣬������һЩ����֮���ĸ����ã����� REPLACE INTO��

����������һ�ű���

CREATE TABLE `auto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL,
  `v` varchar(100) DEFAULT NULL,
  `extra` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_k` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

auto ����һ�������� id �ֶ���Ϊ�������ֶ� k �� UNIQUE KEY ��Ψһ��Լ����д�뼸����¼֮������������

xupeng@diggle7:3600(dba_m) [dba] mysql> INSERT INTO auto (k, v, extra) VALUES (1, '1', 'extra 1'), (2, '2', 'extra 2'), (3, '3', 'extra 3');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

xupeng@diggle7:3600(dba_m) [dba] mysql> SHOW CREATE TABLE auto\G
*************************** 1. row ***************************
       Table: auto
Create Table: CREATE TABLE `auto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL,
  `v` varchar(100) DEFAULT NULL,
  `extra` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
1 row in set (0.01 sec)

xupeng@diggle7:3600(dba_m) [dba] mysql> SELECT * FROM auto;
+----+---+------+---------+
| id | k | v    | extra   |
+----+---+------+---------+
|  1 | 1 | 1    | extra 1 |
|  2 | 2 | 2    | extra 2 |
|  3 | 3 | 3    | extra 3 |
+----+---+------+---------+
3 rows in set (0.00 sec)

�� slave �ڵ����Ǻ� master һ�µģ�

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
xupeng@diggle8:3600(dba_s) [dba] mysql> SELECT * FROM auto;
+----+---+------+---------+
| id | k | v    | extra   |
+----+---+------+---------+
|  1 | 1 | 1    | extra 1 |
|  2 | 2 | 2    | extra 2 |
|  3 | 3 | 3    | extra 3 |
+----+---+------+---------+
3 rows in set (0.00 sec)

xupeng@diggle8:3600(dba_s) [dba] mysql> SHOW CREATE TABLE auto\G
*************************** 1. row ***************************
       Table: auto
Create Table: CREATE TABLE `auto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL,
  `v` varchar(100) DEFAULT NULL,
  `extra` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

���Կ�����д��������¼֮����auto ���� AUTO_INCREMENT ����Ϊ 4��Ҳ����˵��һ�����ֹ�Ϊ id ָ��ֵ�ļ�¼��id �ֶε�ֵ���� 4��

������ʹ�� REPLACE INTO ��д��һ����¼��

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
xupeng@diggle7:3600(dba_m) [dba] mysql> REPLACE INTO auto (k, v) VALUES (1, '1-1');
Query OK, 2 rows affected (0.01 sec)

xupeng@diggle7:3600(dba_m) [dba] mysql> SELECT * FROM auto;
+----+---+------+---------+
| id | k | v    | extra   |
+----+---+------+---------+
|  2 | 2 | 2    | extra 2 |
|  3 | 3 | 3    | extra 3 |
|  4 | 1 | 1-1  | NULL    |
+----+---+------+---------+
3 rows in set (0.00 sec)

xupeng@diggle7:3600(dba_m) [dba] mysql> SHOW CREATE TABLE auto\G
*************************** 1. row ***************************
       Table: auto
Create Table: CREATE TABLE `auto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL,
  `v` varchar(100) DEFAULT NULL,
  `extra` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

���Կ��� MySQL ˵ ��2 rows affected��������������ֻдһ����¼��Ϊʲô�أ�������Ϊ MySQL ��ִ�� REPLACE INTO auto (k) VALUES (1) ʱ���ȳ��� INSERT INTO auto (k) VALUES (1)���������Ѿ�����һ�� k=1 �ļ�¼�������� duplicate key error������ MySQL ����ɾ�����е����� k=1 �� id=1 �ļ�¼��Ȼ������д��һ���µļ�¼��

��ʱ�� slave �ϳ����˹��������⣺

1
2
3
4
5
6
7
8
9
10
11
xupeng@diggle8:3600(dba_s) [dba] mysql> SHOW CREATE TABLE auto\G
*************************** 1. row ***************************
       Table: auto
Create Table: CREATE TABLE `auto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL,
  `v` varchar(100) DEFAULT NULL,
  `extra` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

����֪������ǰ�������� id �ֶε�����ֵ�� 4��AUTO_INCREMENT Ӧ��Ϊ 5������ slave �� AUTO_INCREMENT ȴ��δ���£�������ʲô�����أ������� slave ����Ϊ master ֮�������� AUTO_INCREMENT ��ʵ�ʵ� next id ��ҪС��д���¼�¼ʱ�ͻᷢ�� duplicate key error��ÿ�γ�ͻ֮�� AUTO_INCREMENT += 1��ֱ������Ϊ max(id) + 1 ֮�����ָܻ�������

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
xupeng@diggle8:3600(dba_s) [dba] mysql> REPLACE INTO auto (k, v) VALUES (4, '4');
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
xupeng@diggle8:3600(dba_s) [dba] mysql> REPLACE INTO auto (k, v) VALUES (5, '5');
Query OK, 1 row affected (0.00 sec)

xupeng@diggle8:3600(dba_s) [dba] mysql> SELECT * FROM auto;
+----+---+------+---------+
| id | k | v    | extra   |
+----+---+------+---------+
|  2 | 2 | 2    | extra 2 |
|  3 | 3 | 3    | extra 3 |
|  4 | 1 | 1-1  | NULL    |
|  5 | 5 | 5    | NULL    |
+----+---+------+---------+
4 rows in set (0.00 sec)

û��Ԥ�ϵ� MySQL �����ݳ�ͻʱʵ������ɾ���˾ɼ�¼����д���¼�¼������ʹ�� REPLACE INTO ʱ������һ����������֮ǰ��������˵��ִ���� REPLACE INTO auto (k, v) VALUES (1, ��1-1��) ֮����������д����¼ʱ��δ�� extra �ֶ�ָ��ֵ��ԭ��¼ extra �ֶε�ֵ�͡���ʧ���ˣ���ͨ���Ⲣ����ҵ������Ԥ�ڵģ�������������ʵ�����ǣ������� k=1 �ļ�¼ʱ���Ͱ� v �ֶε�ֵ����Ϊ ��1-1��������δָ�����ֶ��򱣳�ԭ״����������һ������ MySQL ������ INSERT INTO auto (k, v) VALUES (1, ��1-1��) ON DUPLICATE KEY UPDATE v=VALUES(v);

���ڴˣ��ܶ�ʹ�� REPLACE INTO �ij�����ʵ������Ҫ���� INSERT INTO �� ON DUPLICATE KEY UPDATE������ȷ���� REPLACE INTO ��Ϊ�͸����õ�ǰ���£�����ʹ�� REPLACE INTO��

ԭ�ģ�http://blog.xupeng.me/2013/10/11/mysql-replace-into-trap/

  • ת����ע����Դ��ITѧϰ�� ��ַ��http://www.t086.com/ �����������Ƽ�������
  • �ر������� ��վ�������ر�������ֹת�ص�ר�������������¿�������ת�أ���������ע��������ԭʼ���ߡ����°�Ȩ������ԭʼ�������С����ڱ���վת�����µĸ��˺���վ�����DZ�ʾ������л�⡣������վת�ص������а�Ȩ��������ϵ���ǣ����ǻᾡ�����Ը�����
������ѯ Health Check Gulangyu
© 2017 T086ѧϰ�� - T086.com(ԭitlearner.com)
RunTime:6.82ms QueryTime:7