有没有这样的事:
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