首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

MySQL 技巧:使用 CONCAT() 在原有欄位值後追加新內容

     編輯:PHP 綜合知識

需求場景

常見需求:在不覆蓋原有資料的前提下,將新字串**附加**到現有欄位末尾。例如:

  • 文章內容補充段落
  • 用戶備註累加記錄
  • 日誌欄位持續寫入
  • 路徑字串拼接

核心語法:CONCAT() 函式

UPDATE `table_name` 
SET `column_name` = CONCAT(`column_name`, '要追加的字串')
WHERE `condition_column` = 'condition_value';

實戰範例

範例 1:為用戶備註欄位追加操作記錄

UPDATE `users` 
SET `remarks` = CONCAT(`remarks`, '\n[2024-01-15 10:30] 管理員修改了權限')
WHERE `id` = 1001;

範例 2:批次為商品標題加上促銷前綴

UPDATE `products` 
SET `title` = CONCAT('[熱銷] ', `title`)
WHERE `category_id` = 5 AND `status` = 'active';

範例 3:JSON 欄位追加陣列元素(MySQL 5.7+)

若欄位為 JSON 類型,建議使用 JSON_ARRAY_APPEND():

UPDATE `orders` 
SET `tags` = JSON_ARRAY_APPEND(`tags`, '$', '優先處理')
WHERE `id` = 888;

進階技巧與注意事項

1. 處理 NULL 值

CONCAT() 任一參數為 NULL 會回傳 NULL。解決:

-- 使用 COALESCE 或 IFNULL
SET `col` = CONCAT(COALESCE(`col`, ''), '新內容');
-- 或
SET `col` = CONCAT(IFNULL(`col`, ''), '新內容');

2. 追加帶引號/特殊字元的字串

-- 單引號需轉義
SET `col` = CONCAT(`col`, '它的名字叫 "O\'Reilly"');
-- 或使用參數化查詢(PDO)
$stmt = $pdo->prepare("UPDATE t SET c = CONCAT(c, ?) WHERE id = ?");
$stmt->execute(["新內容", $id]);

3. 效能考量

  • CONCAT 會產生新字串,大量資料更新時會產生大量 I/O。
  • 長文本欄位(TEXT/BLOB)頻繁追加易導致**碎片化**,定期 OPTIMIZE TABLE。
  • 高併發場景下,考慮改用 **關聯表** 存儲歷史記錄(如 user_logs),而非單欄位疊加。

4. 反向操作:移除尾部字串

-- 移除最後 10 個字元
UPDATE `t` SET `c` = SUBSTRING(`c`, 1, CHAR_LENGTH(`c`) - 10);

總結

CONCAT(column, 'string') 是 MySQL 原地追加字串的標準做法,簡單高效。記得處理 NULL、轉義特殊字元,並在大數據量時評估效能影響。若是結構化資料(JSON、陣列、日誌),優先考慮**正規化設計**拆分到獨立資料表,長期維護更優雅。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved