在使用连接的SQL查询期间,我是否需要使用事务?
我在考虑这样的事情:
Delete table1, table2, table3
FROM table1 INNER JOIN table2 ON(...)
LEFT JOIN table3 ON (...)
WHERE table1.column = something...
Run Code Online (Sandbox Code Playgroud)
(我不知道语法是否100%正确,但我想你无论如何都理解它)
是否存在不应删除所有行的风险?
谢谢!
由于这是单个命令 ( DELETE),因此无需显式使用事务。根据定义,SQL 命令是原子的,即,如果出现错误,它将删除所有符合条件的行,或者根本不删除任何行。
编辑:这个答案在理论上是正确的,对于支持 ACID 的数据库来说也是如此。如果数据库不支持原子性,或者存在会触发数据库引擎部分错误行为的错误,那么所有的赌注都会失败。然而,在这些场景中使用事务不太可能神奇地使其变得更好。
不,您不需要交易。一个事务使多个语句作为一个单元运行;在事务内部或外部运行单个语句将始终产生相同的结果。
为了回答你的最后一个问题,这个声明要么全有,要么全无。我能想到的唯一可能的例外是,如果语句中间发生断电……而交易无济于事。