在 MySQL 中為特定欄位的現有值尾端追加字串,可使用 CONCAT() 函數搭配 UPDATE 語句完成。常見於為文章標題加註記、網址補齊參數、狀態碼擴充等場景。
UPDATE `table_name`
SET `column_name` = CONCAT(`column_name`, 'append_string')
WHERE `condition`;
-- 為 articleid=3487 且標題不以 'v' 結尾的文章,標題後加上 'MV'
UPDATE `文章表`
SET `title` = CONCAT(`title`, 'MV')
WHERE `articleid` = 3487
AND `title` NOT LIKE '%v';
UPDATE `products`
SET `tags` = CONCAT(`tags`, ',', 'new_tag')
WHERE `id` = 100
AND `tags` NOT LIKE '%,new_tag%'; -- 避免重複
UPDATE `users`
SET `nickname` = CONCAT(IFNULL(`nickname`, ''), IF(`nickname` IS NULL OR `nickname` = '', '', ' '), 'VIP')
WHERE `uid` = 888;
CONCAT_WS(separator, str1, str2, ...) 會自動跳過 NULL 值,並用指定分隔符連接非空字串:
UPDATE `orders`
SET `memo` = CONCAT_WS('; ', `memo`, '客戶要求加急')
WHERE `order_id` = 555;
UPDATE 會對符合條件的列加寫鎖(行鎖),大量更新建議分批次(LIMIT 1000 配合主鍵範圍)執行,減少鎖衝突。SELECT 確認影響範圍:SELECT id, title FROM 文章表 WHERE articleid=3487 AND title NOT LIKE '%v';| 函數 | 用途 | 範例 |
|---|---|---|
CONCAT(str1,str2,...) | 單純連接,任一參數為 NULL 結果為 NULL | CONCAT('a','b') → 'ab' |
CONCAT_WS(sep,str1,str2,...) | 帶分隔符連接,自動略過 NULL | CONCAT_WS(',','a',NULL,'c') → 'a,c' |
INSERT(str,pos,len,newstr) | 在指定位置替換/插入 | INSERT('abcdef',3,0,'XY') → 'abXYcdef' |
掌握 CONCAT 系列函數,能靈活處理欄位值的字串拼接需求,配合條件判斷避免髒資料產生。