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一份致意.