首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何依次执行两个删除查询

如何依次执行两个删除查询
EN

Stack Overflow用户
提问于 2013-11-12 23:15:08
回答 4查看 2.8K关注 0票数 0

我有以下问题

  1. 从其中的Id中删除(从B中选择Id )
  2. 从B中删除

我想确保第一条语句在执行第二条语句之前已经完成,因为1)依赖于2)

我想知道如果我像这样执行这些查询,SQL是否负责在启动第二个事务之前完成第一个事务?或者有什么方法可以确保第二个事务只在第一个事务完成之后才开始呢?

如能提供任何帮助,将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-12 23:19:39

可以通过用分号;分隔查询来连续执行查询。更多细节在MySQL文档中。

只需做:

代码语言:javascript
运行
复制
DELETE FROM A WHERE Id IN (SELECT Id FROM B); DELETE FROM B;

基于您的需求;这正是您根据下面的示例所要求的:

代码语言:javascript
运行
复制
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的库)来完成这一任务。

票数 1
EN

Stack Overflow用户

发布于 2013-11-12 23:17:42

如果语句在同一批中,则保证。

但是,您可能希望将它们封装在一个事务中,以确保两者都发生或两者都不会发生(回滚)。

票数 1
EN

Stack Overflow用户

发布于 2013-11-12 23:26:06

为了回答您的问题,MySQL在给定的会话中一次只执行一条语句。因此,第二条语句不可能在第一条语句完成之前启动(假设您在同一个线程中执行它们)。

我将提供另一种选择:在一条语句中从两个表中使用多表删除如何?

代码语言:javascript
运行
复制
DELETE A, B FROM A RIGHT OUTER JOIN B USING (id);

上面使用的联接类型意味着B中的所有行都将被删除,如果有匹配的id值,还将删除A中具有匹配id值的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19941944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档