在使用连接的SQL查询期间,我是否需要使用事务?
我在考虑类似的事情:
Delete table1, table2, table3
FROM table1 INNER JOIN table2 ON(...)
LEFT JOIN table3 ON (...)
WHERE table1.column = something...
(我不知道语法是否100%正确,但我想你无论如何都理解它)
是否存在不会删除所有应删除的行的风险?
谢谢!
答案 0 :(得分:5)
我不认为使用事务会做任何事情,在大多数情况下,单个查询是原子的,并且它在单个事务中运行。对于MS-SQL服务器查询,如没有日志和截断的批量插入可能需要事务。在您的情况下,您不需要在删除语句周围进行转换。如果有多个语句,则需要将它们包装在单个事务中,以便执行所有或不执行任何操作 看看这个question
答案 1 :(得分:4)
由于这是一个命令(DELETE
),因此无需显式使用事务。根据定义,SQL命令是原子的,即它将删除符合条件的所有行,或者根本不删除任何错误。
编辑:这个答案在理论上是正确的,对于支持ACID的数据库也是如此。如果数据库不支持原子性,或者存在触发数据库引擎不正确行为的错误,则所有投注都将关闭。但是,在这些情况下,使用交易不太可能神奇地使其变得更好。
答案 2 :(得分:4)
不,您不需要交易。事务使多个语句作为一个单元运行;在事务中或事务外运行单个语句将始终产生相同的结果。
为了回答你的上一个问题,这个陈述是全有或全无。我能想到的唯一可能的例外是,如果声明中间有停电......并且交易无效。
答案 3 :(得分:1)
对于任何INSERT
,UPDATE
,SELECT
,DELETE
语句,没有显式事务命令,如果发生错误,数据库引擎将回滚整个语句