Giải pháp: CONCAT() trong UPDATE
Sử dụng CONCAT('prefix', column) để thêm tiền tố cho mọi dòng.
Ví dụ minh họa
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Subject VARCHAR(200)
);
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL'), ('MongoDB'), ('Java');
Dữ liệu gốc
+----+---------+ | Id | Subject | +----+---------+ | 1 | MySQL | | 2 | MongoDB | | 3 | Java | +----+---------+
UPDATE thêm tiền tố
mysql> UPDATE DemoTable
-> SET Subject = CONCAT('My Favourite Subject is ', Subject);
Kết quả
+----+---------------------------------+ | Id | Subject | +----+---------------------------------+ | 1 | My Favourite Subject is MySQL | | 2 | My Favourite Subject is MongoDB | | 3 | My Favourite Subject is Java | +----+---------------------------------+
Các biến thể CONCAT
| Cú pháp | Kết quả |
|---|---|
CONCAT('Prefix: ', col) | Prefix: value |
CONCAT(col, ' Suffix') | value Suffix |
CONCAT('[', col, ']') | [value] |
CONCAT_WS(' ', 'Prefix', col, 'Suffix') | Prefix value Suffix (bỏ qua NULL) |
CONCAT vs CONCAT_WS
-- CONCAT: NULL → kết quả NULL
SELECT CONCAT('A', NULL, 'B'); -- NULL
-- CONCAT_WS (With Separator): Bỏ qua NULL
SELECT CONCAT_WS(' ', 'A', NULL, 'B'); -- 'A B'
UPDATE có điều kiện
-- Chỉ thêm tiền tố cho Subject chưa có
UPDATE DemoTable
SET Subject = CONCAT('My Favourite Subject is ', Subject)
WHERE Subject NOT LIKE 'My Favourite Subject is %';
⚠️ Lưu ý an toàn
- Test SELECT trước:
SELECT Id, Subject, CONCAT('Prefix: ', Subject) AS new_subject FROM DemoTable; - Backup hoặc Transaction:
START TRANSACTION; UPDATE ...; SELECT * FROM DemoTable; -- Verify COMMIT;
- WHERE để giới hạn phạm vi
- Idempotent: L chạy nhiều lần không bị duplicate prefix
Ứng dụng thực tế
- Thêm prefix cho code:
SET sku = CONCAT('SKU-', sku) - Thêm domain cho email:
SET email = CONCAT(username, '@company.com') - Format phone:
SET phone = CONCAT('+84', SUBSTRING(phone, 2))