在資料庫操作中,避免插入重複記錄是常見需求。以圖示場景為例,需根據 SongId 判斷數據是否已存在。
將 SongId 定義為主鍵或添加唯一索引,資料庫引擎會自動攔截重複插入並拋出錯誤。應用層捕獲異常即可判斷是否存在,無需額外查詢,效能最優。
INSERT IGNORE INTO songs (SongId, ...) VALUES (...);
-- 或
INSERT INTO songs (SongId, ...) VALUES (...) ON DUPLICATE KEY UPDATE SongId=SongId;
若鍵衝突則靜默忽略或更新,配合 ROW_COUNT() 判斷是否為新增。
SQL Server / Oracle 支援 MERGE,可在單條語句中完成「不存在則插入,存在則更新/忽略」的邏輯。
IF NOT EXISTS (SELECT 1 FROM songs WHERE SongId = @SongId)
INSERT INTO songs ...;
注意:高併發下可能出現競態條件,仍需配合事務隔離級或鎖機制。
總結:優先採用資料庫層面的約束機制,簡潔且高效;應用層邏輯作為輔助。