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

SQL 插入前判斷數據是否已存在的最佳實踐

     編輯:程式設計綜合問答

如何在 SQL 插入前高效檢測重複數據

在資料庫操作中,避免插入重複記錄是常見需求。以圖示場景為例,需根據 SongId 判斷數據是否已存在。

方案一:設定主鍵或唯一約束(推薦)

將 SongId 定義為主鍵或添加唯一索引,資料庫引擎會自動攔截重複插入並拋出錯誤。應用層捕獲異常即可判斷是否存在,無需額外查詢,效能最優。

方案二:INSERT IGNORE / ON DUPLICATE KEY UPDATE (MySQL)

INSERT IGNORE INTO songs (SongId, ...) VALUES (...);
-- 或
INSERT INTO songs (SongId, ...) VALUES (...) ON DUPLICATE KEY UPDATE SongId=SongId;

若鍵衝突則靜默忽略或更新,配合 ROW_COUNT() 判斷是否為新增。

方案三:MERGE 語句

SQL Server / Oracle 支援 MERGE,可在單條語句中完成「不存在則插入,存在則更新/忽略」的邏輯。

方案四:應用層先查後插(不推薦高併發場景)

IF NOT EXISTS (SELECT 1 FROM songs WHERE SongId = @SongId)
    INSERT INTO songs ...;

注意:高併發下可能出現競態條件,仍需配合事務隔離級或鎖機制。

總結:優先採用資料庫層面的約束機制,簡潔且高效;應用層邏輯作為輔助。

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