我有以下问题
我想确保第一条语句在执行第二条语句之前已经完成,因为1)依赖于2)
我想知道如果我像这样执行这些查询,SQL是否负责在启动第二个事务之前完成第一个事务?或者有什么方法可以确保第二个事务只在第一个事务完成之后才开始呢?
如能提供任何帮助,将不胜感激。
发布于 2013-11-12 23:19:39
可以通过用分号;分隔查询来连续执行查询。更多细节在MySQL文档中。
只需做:
DELETE FROM A WHERE Id IN (SELECT Id FROM B); DELETE FROM B;基于您的需求;这正是您根据下面的示例所要求的:
mysql> select sleep(5); show databases;
+----------+
| sleep(5) |
+----------+
| 0 |
+----------+
1 row in set (5.00 sec)
+--------------------+
| Database |
+--------------------+
| ... |
+--------------------+
9 rows in set (0.01 sec)您可以使用mysql -e命令和几乎任何mysql库(例如带有php的库)来完成这一任务。
发布于 2013-11-12 23:17:42
如果语句在同一批中,则保证。
但是,您可能希望将它们封装在一个事务中,以确保两者都发生或两者都不会发生(回滚)。
发布于 2013-11-12 23:26:06
为了回答您的问题,MySQL在给定的会话中一次只执行一条语句。因此,第二条语句不可能在第一条语句完成之前启动(假设您在同一个线程中执行它们)。
我将提供另一种选择:在一条语句中从两个表中使用多表删除如何?
DELETE A, B FROM A RIGHT OUTER JOIN B USING (id);上面使用的联接类型意味着B中的所有行都将被删除,如果有匹配的id值,还将删除A中具有匹配id值的行。
https://stackoverflow.com/questions/19941944
复制相似问题