有沒有這樣的事:
TEST DELETE FROM user WHERE somekey = 45;
是否有命令測試SQL查詢而不執行它? (MySQL或ANSI SQL)
,可以返回的任何錯誤,例如該somekey不存在,或者一些約束衝突或任何東西,和報告許多行會怎樣受影響,但不執行查詢?
我知道你可以很容易地在選擇查詢中打開任何查詢,在任何行中都沒有寫或刪除效果,但這可能會導致錯誤,並且如果要測試和調試許多查詢,它不是很實用。
有沒有這樣的事:
TEST DELETE FROM user WHERE somekey = 45;
是否有命令測試SQL查詢而不執行它? (MySQL或ANSI SQL)
,可以返回的任何錯誤,例如該somekey不存在,或者一些約束衝突或任何東西,和報告許多行會怎樣受影響,但不執行查詢?
我知道你可以很容易地在選擇查詢中打開任何查詢,在任何行中都沒有寫或刪除效果,但這可能會導致錯誤,並且如果要測試和調試許多查詢,它不是很實用。
我所知道的唯一的事情就是把它包起來的,就是始終回滾事務:
BEGIN TRANSACTION
DELETE FROM user WHERE somekey = 45;
ROLLBACK TRANSACTION
確保您執行整個塊,而不僅僅是delete語句。另外,不要在任何生產環境或任何不能丟失數據的系統上運行此操作。
據我所知沒有這樣的事情存在。此外,如果沒有值爲45的somekey
不存在,則不會發生錯誤。它不會刪除任何東西。
我的意思是,僅僅作爲一個例子,查詢中鍵入的字段可能不存在,或拼寫錯誤,並且會產生SQL錯誤。 – Petruza 2010-03-12 16:55:33
ANSI SQL:否
MySQL:也許。 EXPLAIN關鍵字最初只與SELECT一起工作,但它現在可能已被擴展到UPDATE和DELETE。
EXPLAIN在MySQL 5.6.10中使用UPDATE查詢工作 – Dwayne 2013-10-09 17:06:16
在MySQL中使用此
START TRANSACTION;
QUERY;
使用是很重要的 「;」因爲如果你不這樣做,它將無法工作。例如
START TRANSACTION;
UPDATE tableX SET colX = valueA, colY = valueB WHERE id=1
您可以使用F11和Teradata SQL助理做到這一點
的種類。假設你有一張你想更新的表格:「Entry」。您可以
SELECT Col1 = OTHER.Col4,
Col2 = EXTRA.Col2,
FROM dbo.Entry E
INNER JOIN MYOTHERTABLE OTHER ON OTHER.Id = E.Id
INNER JOIN MYEXTRATABLE EXTRA ON EXTRA.Id = OTHER.Id
在這種情況下,Col1和Col2是Entry表的列。如果你寫了
UPDATE E
SET
而不是最初的SELECT,你會有你的更新。它不適用於所有情況,但如果它是簡單更新,則可以通過此方式快速預覽。
爲什麼在生產環境中運行此查詢不是一個好主意? – franzlorenzon 2012-11-22 15:07:20
@franzlorenzon我想這只是一個偏執狂的事情。我不想忘記BEGIN TRANSACTION並意外刪除一條記錄。 – NYSystemsAnalyst 2012-11-23 13:36:37
不適用於MySQL – ub3rst4r 2013-01-10 07:12:26