首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 刪除關聯數據:子查詢法與 JOIN 法的標準與實踐差異

     編輯:關於SqlServer

根據其他表條件刪除本表數據,標準 SQL 採用子查詢,部分產品支持 JOIN 刪除但不標準。

標準 SQL:子查詢刪除

DELETE FROM Inventory
WHERE BreedID IN (
  SELECT BreedID FROM Breed WHERE BreedName = 'Shitzu'
)

安全驗證:先 SELECT 再 DELETE

SELECT * FROM Inventory
WHERE BreedID IN (
  SELECT BreedID FROM Breed WHERE BreedName = 'Shitzu'
)

確認結果集無誤後再執行 DELETE,防止誤刪。

JOIN 刪除:非標準、跨庫差異大

-- SQL Server 支持語法(非 ANSI)
DELETE I
FROM Inventory I
JOIN Breed B ON I.BreedID = B.BreedID
WHERE B.BreedName = 'Shitzu'

-- Oracle/PostgreSQL/MySQL 語法各異,甚至不支持

實測多平台均有坑,**生產環境強烈建議僅用子查詢標準寫法**。

多表級聯刪除:標準 SQL 無直接語法

  • 方案 1:應用層循環調用單表 DELETE
  • 方案 2:定義外鍵 ON DELETE CASCADE(需謹慎評估業務語義)
  • 方案 3:軟刪除標記位 IsDeleted BIT,定期清理作業

最佳實踐原則

  1. 刪除前必做 SELECT 驗證
  2. 事務包裝:BEGIN TRAN ... COMMIT/ROLLBACK
  3. 備份先行:大批量刪除前做完全備份或快照
  4. 索引維護:大量刪除後 UPDATE STATISTICS + 重建碎片索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved