iT邦幫忙

DAY 8
8

MySQL那些事兒系列 第 8

SQL MERGE 指令在MySQL的實作

MERGE 指令十分方便,但是MySQL並未直接提供MERGE,
而是採用其他方式來實作.
我們來看看實際的例子.

CREATE TABLE ithelp1008(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(10) NOT NULL,
skill CHAR(20) NOT NULL,
UNIQUE INDEX (name) 
);

INSERT INTO ithelp1008(name, skill) VALUES
('泰大', '指標達人'),
('小雨', 'MySQL練習者');

SELECT *
FROM ithelp1008;

+----+--------+----------------+
| id | name   | skill          |
+----+--------+----------------+
|  1 | 泰大   | 指標達人       |
|  2 | 小雨   | MySQL練習者    |
+----+--------+----------------+

INSERT INTO ithelp1008(name, skill) VALUES
('蒼鴻', 'PHP探索者'),
('泰大', 'D槽達人')
ON DUPLICATE KEY UPDATE skill = VALUES(skill);
Query OK, 3 rows affected (0.05 sec)
Records: 2  Duplicates: 1  Warnings: 0

SELECT *
FROM ithelp1008;

+----+--------+----------------+
| id | name   | skill          |
+----+--------+----------------+
|  1 | 泰大   | D槽達人        |
|  2 | 小雨   | MySQL練習者    |
|  3 | 蒼鴻   | PHP探索者      |
+----+--------+----------------+

可以看到 泰大的部份 是 UPDATE 成 D槽達人,
蒼鴻的部份是INSERT的.

MySQL 還有提供 REPLACE 指令.

REPLACE INTO ithelp1008(name, skill) VALUES
('小雨', '亂放炮'),
('泰大', '德語專家');
Query OK, 4 rows affected (0.05 sec)
Records: 2  Duplicates: 2  Warnings: 0

SELECT *
FROM ithelp1008;

+----+--------+--------------+
| id | name   | skill        |
+----+--------+--------------+
|  3 | 蒼鴻   | PHP探索者    |
|  5 | 小雨   | 亂放炮       |
|  6 | 泰大   | 德語專家     |
+----+--------+--------------+


可以看到skill部份已經改變.而且id有變化,因為我們是根據name
來判斷,id 部份讓系統自動生成,實際上是DELETE舊的,INSERT新的.
當然我們也可以輸入時使用id.

接著還是再輸入新的人物,另外把我亂放炮改掉吧.
改成剛剛蒼鴻送我的新稱號,他說他都看我的圖"漲"大的.

REPLACE INTO ithelp1008(name, skill) VALUES
('小雨', '圖王之王 '),
('總裁', '調校小情人');
Query OK, 3 rows affected (0.05 sec)
Records: 2  Duplicates: 1  Warnings: 0

最終得到這樣的結果,
SELECT *
FROM ithelp1008;

+----+--------+-----------------+
| id | name   | skill           |
+----+--------+-----------------+
|  3 | 蒼鴻   | PHP探索者       |
|  6 | 泰大   | 德語專家        |
|  7 | 小雨   | 圖王之王        |
|  8 | 總裁   | 調校小情人      |
+----+--------+-----------------+
4 rows in set (0.00 sec)

幾位的帳號借來用用,純粹是學術用途.
若有冒犯之處,小弟改日奉上精選DVD一份致意.


上一篇
MySQL的特殊指令HANDLER
下一篇
HAVING 的應用
系列文
MySQL那些事兒30

2 則留言

0
SunAllen
iT邦高手 1 級 ‧ 2013-10-08 21:22:04

沙發

MySQL的DVD嗎? 我也要我也要~~臉紅

是東瀛出品的.

小雨大 太陽大的意思也想上榜臉紅

我要留言

立即登入留言