【MySQL】淺析“replace into 操作” 與 “insert into+ON DUPLICATE KEY UPDATE操作”
阿新 • • 發佈:2019-01-05
對有主鍵和唯一鍵的表進行insert into+ON DUPLICATE KEY UPDATE操作
(product)[email protected] [test]> CREATE TABLE `student` (
-> `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-> `sid` varchar(6) NOT NULL,
-> `name` varchar(10) NOT NULL DEFAULT '',
-> `class` varchar(10) NOT NULL DEFAULT '',
-> `score` int(3) NOT NULL DEFAULT '0',
-> primary key(`id`),
-> unique (`sid`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
(product)[email protected] [test]> insert into student(sid,name,class,score) value('0001','a','1',56),('0002','b','1',61),('0003','c','2',78),('0004','d','2',45),('0005','e','3',76);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
(product)[email protected] [test]> select * from student;
+----+------+------+-------+-------+
| id | sid | name | class | score |
+----+------+------+-------+-------+
| 1 | 0001 | a | 1 | 56 |
| 2 | 0002 | b | 1 | 61 |
| 3 | 0003 | c | 2 | 78 |
| 4 | 0004 | d | 2 | 45 |
| 5 | 0005 | e | 3 | 76 |
+----+------+------+-------+-------+
5 rows in set (0.00 sec)
(product)[email protected] [test]> insert into student (sid,name,class,score) value('0001','f','3',66) ON DUPLICATE KEY UPDATE name=values(name),class=values(class),score=values(score);
Query OK, 2 rows affected (0.00 sec)
(product)[email protected] [test]> select * from student;
+----+------+------+-------+-------+
| id | sid | name | class | score |
+----+------+------+-------+-------+
| 1 | 0001 | f | 3 | 66 |
| 2 | 0002 | b | 1 | 61 |
| 3 | 0003 | c | 2 | 78 |
| 4 | 0004 | d | 2 | 45 |
| 5 | 0005 | e | 3 | 76 |
+----+------+------+-------+-------+
5 rows in set (0.00 sec)
(product)[email protected] [test]> CREATE TABLE `student` (
-> `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-> `sid` varchar(6) NOT NULL,
-> `name` varchar(10) NOT NULL DEFAULT '',
-> `class` varchar(10) NOT NULL DEFAULT '',
-> `score` int(3) NOT NULL DEFAULT '0',
-> primary key(`id`),
-> unique (`sid`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
(product)[email protected] [test]> insert into student(sid,name,class,score) value('0001','a','1',56),('0002','b','1',61),('0003','c','2',78),('0004','d','2',45),('0005','e','3',76);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
(product)[email protected] [test]> select * from student;
+----+------+------+-------+-------+
| id | sid | name | class | score |
+----+------+------+-------+-------+
| 1 | 0001 | a | 1 | 56 |
| 2 | 0002 | b | 1 | 61 |
| 3 | 0003 | c | 2 | 78 |
| 4 | 0004 | d | 2 | 45 |
| 5 | 0005 | e | 3 | 76 |
+----+------+------+-------+-------+
5 rows in set (0.00 sec)
(product)[email protected] [test]> insert into student (sid,name,class,score) value('0001','f','3',66) ON DUPLICATE KEY UPDATE name=values(name),class=values(class),score=values(score);
Query OK, 2 rows affected (0.00 sec)
(product)[email protected] [test]> select * from student;
+----+------+------+-------+-------+
| id | sid | name | class | score |
+----+------+------+-------+-------+
| 1 | 0001 | f | 3 | 66 |
| 2 | 0002 | b | 1 | 61 |
| 3 | 0003 | c | 2 | 78 |
| 4 | 0004 | d | 2 | 45 |
| 5 | 0005 | e | 3 | 76 |
+----+------+------+-------+-------+
5 rows in set (0.00 sec)