Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cập nhật tất cả dòng thêm tiền tố vào text trong MySQL?

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ápKế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

  1. Test SELECT trước:
    SELECT Id, Subject, CONCAT('Prefix: ', Subject) AS new_subject FROM DemoTable;
  2. Backup hoặc Transaction:
    START TRANSACTION;
    UPDATE ...;
    SELECT * FROM DemoTable;  -- Verify
    COMMIT;
  3. WHERE để giới hạn phạm vi
  4. 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))