`
caiceclb
  • 浏览: 242466 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

MySQL执行多表删除

阅读更多
MySQL可以执行多表删除,我的测试如下:



mysql> select * from person;
+----+------+-----------+----------+----------+
| id | age  | firstname | lastname | image_id |
+----+------+-----------+----------+----------+
|  2 | NULL | NULL      | NULL     |     NULL |
| 21 | NULL | NULL      | NULL     |     NULL |
|  1 | NULL | NULL      | NULL     |     NULL |
+----+------+-----------+----------+----------+
3 rows in set (0.00 sec)

mysql> select * from tree;
+----+------+-----------+
| id | name | parent_id |
+----+------+-----------+
|  1 | name |         1 |
|  2 | name |         1 |
|  3 | name |         1 |
|  4 | name |         2 |
|  5 | name |         2 |
|  6 | name |         2 |
+----+------+-----------+
6 rows in set (0.00 sec)

mysql> delete p,t from person p,tree t where p.id = 1 and t.parent_id =1;
Query OK, 4 rows affected (0.02 sec)

/* 执行之后看结果 */
mysql> select * from person;
+----+------+-----------+----------+----------+
| id | age  | firstname | lastname | image_id |
+----+------+-----------+----------+----------+
|  2 | NULL | NULL      | NULL     |     NULL |
| 21 | NULL | NULL      | NULL     |     NULL |
+----+------+-----------+----------+----------+
2 rows in set (0.00 sec)

mysql> select * from tree;
+----+------+-----------+
| id | name | parent_id |
+----+------+-----------+
|  4 | name |         2 |
|  5 | name |         2 |
|  6 | name |         2 |
+----+------+-----------+
3 rows in set (0.01 sec)

mysql>



适用于级联删除(我以上测试是拿以前的test数据库中的两个表做的,懒得再建表了
,没啥关联,凑合用pareant_id了)。

比如删除一篇文章(表article),其评论(另外一个表comment)使用articleId做外键,当删除某篇文章时(假设id为1,同时要删除评论,实际中的id自然是靠传参),就可以用以下语句:

delete a,c from article a,comment c where a.id = 1 and c.articleId = 1;


好文章就该列举点实际的生产使用示例(文章发布哪个网站没有?特例就算了),搞的像书本上的垃圾小例子(虽然是为了简单易懂,但每个应用点都给点提示,实际都是怎么用的嘛),会而不晓得用在哪里(想想吧,每个人都贡献下自己对某个功能的实现方式,本来一人只会一种的,现在就开阔了思路,学习了别人更好更妙的想法)。


PS:测试中条件连接先用了or(先入逻辑),结果相当错,你可以试试。

2008年12月25日 星期四 更新下内容:

使用or连接条件会把另一个表中的数据全部删除(只要两个条件有一个成立)

mysql> select * from tree;
+----+--------+-----------+-------+
| id | name   | parent_id | value |
+----+--------+-----------+-------+
|  1 | name   |         2 | value |
|  2 | nam2e  |         2 | value |
|  3 | nam32e |         2 | value |
+----+--------+-----------+-------+
3 rows in set (0.00 sec)

mysql> select * from person;
+----+------+-----------+----------+----------+
| id | age  | firstname | lastname | image_id |
+----+------+-----------+----------+----------+
|  3 | NULL | NULL      | NULL     |     NULL |
|  1 | NULL | NULL      | NULL     |     NULL |
|  2 | NULL | NULL      | NULL     |     NULL |
+----+------+-----------+----------+----------+
3 rows in set (0.00 sec)

mysql> delete p,t from person p,tree t where p.id=4 or t.parent_id =3;
Query OK, 0 rows affected (0.00 sec)

mysql> delete p,t from person p,tree t where p.id=1 or t.parent_id =3;
Query OK, 4 rows affected (0.02 sec)

mysql>


看这个例子,两个条件都不成立,则无数据被删除,若p.id=1成立,则Person表

删除了id为1的记录,而Tree表中的记录全被删除了。


使用and连接,我发现一旦其中一条条件不存在对应数据项,则两个表都不会删除数据。

两个都有缺点,暂无完好的解决方法。
分享到:
评论
1 楼 wuditom100 2009-03-19  
还是自带的级联删除好啊。。

相关推荐

    mysql delete 多表连接删除功能

    - 总是在执行删除操作前备份重要数据,以防不测。 - 如果有外键约束,删除操作可能会被阻止,除非先禁用约束或使用`CASCADE`选项来删除相关数据。 - 对于InnoDB表,`DELETE`操作会触发事务,可以回滚以防止意外更改...

    MySQL执行delete误删除数据恢复

    在MySQL数据库管理中,有时可能会不小心执行了DELETE命令,导致数据丢失。面对这种情况,有多种方法可以帮助恢复误删除的数据。本文将重点介绍如何利用MySQL的二进制日志(binlog)以及my2sql工具来恢复数据。 首先,...

    mysql 一条语句删除多表数据

    "mysql 一条语句删除多表" 的主题就是关于如何通过单个SQL语句来删除关联的多个表的数据,从而节省数据库连接资源和提高执行效率。下面将详细解释这一技术及其背后的原理。 首先,我们要理解的是SQL语言中的“JOIN...

    MySQL分区表自动创建及删除存储过程

    MySQL分区表是一种优化大型数据表查询效率的技术,它将一个大表分成多个逻辑上相连但物理上独立的部分,每个部分称为一个分区。分区可以按照不同的策略进行,如范围、哈希、列表或复合分区。这样做有助于提高数据...

    MySQL删除表数据 MySQL清空表命令 3种方法

    在MySQL数据库管理中,删除表数据是常见的操作,这可能是为了清理旧数据、测试环境的重置或数据更新。本文将详细介绍三种不同的方法来删除MySQL中的表数据,帮助你更有效地管理数据库。 ### 方法一:TRUNCATE TABLE...

    批量删除MySQL数据库相同前缀的数据表.rar

    在这个脚本中,可能包含了连接到MySQL数据库、查询所有具有特定前缀的数据表、并执行删除操作的逻辑。 在使用这个工具之前,确保你对数据库有完全的权限,并且已经备份了所有重要的数据。因为批量删除操作一旦执行...

    shell实现按照指定日期去删除mysql中表数据

    在linux下通过shell指令实现按照用户指定的日期删除mysql中的表数据,不想收积分的,但是它最低收一分

    Mysql执行脚本步骤

    SQL 脚本文件是一个包含一到多个 SQL 命令的 SQL 语句,我们可以将这些 SQL 脚本放在一个文本文件中,然后通过相关的命令执行这个 SQL 脚本文件。SQL 脚本文件的基本结构如下: -- 创建表,使用“--”进行注释 ...

    MySQL的删除步骤

    ` 类似于删除表,如果数据库不存在,则不会执行删除操作,确保安全。 四、删除MySQL服务 在Windows系统中: 1. 服务管理器:通过“服务”应用程序找到MySQL服务,停止并禁用,然后卸载MySQL Server。 2. 控制面板:...

    MySQL DELETE 删除语句加锁分析1

    7. 根据主键删除多条记录: 这种情况下,MySQL会锁定所有匹配的主键记录,确保删除操作的原子性。 8. 非唯一索引删除已标记为删除的记录: 如果记录已被标记为删除,但物理上仍然存在,删除操作依然会锁定这些...

    mysql删除数据记录PPT

    例如,如果尝试从成绩表中删除一个学生编号,而该编号在学生信息表中作为外键存在且删除模式(ON DELETE)设置为RESTRICT,那么系统将不允许执行删除操作,以保持数据的一致性和完整性。在删除此类记录前,需要先...

    shell脚本实现mysql从原表到历史表数据迁移

    这里我们关注的是使用Shell脚本来实现MySQL从原表到历史表的数据迁移。这种自动化的方法可以帮助我们高效、准确地处理大量数据,同时减少人为错误。 首先,让我们深入理解`shell`脚本。Shell是Linux和Unix系统中的...

    MySQL删除表的时候忽略外键约束的简单实现

    执行这些语句后,MySQL将在执行DROP语句期间暂时忽略外键约束,允许你按任意顺序删除表。需要注意的是,`FOREIGN_KEY_CHECKS`变量是基于会话的,这意味着在关闭客户端或重新连接后,其值会恢复为默认(通常是1,即...

    mysql实现自动创建与删除分区

    `EVENT_AUTO_CREATE_DROP_PARTITION.sql`可能定义了一个数据库事件,定期执行删除过期分区的存储过程。这个事件可以根据业务需求设置,比如每天、每周或每月运行一次。 ```sql DELIMITER // CREATE EVENT drop_old_...

    mysql 索引与执行计划

    ### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...

    MySQL 删除大表的性能问题解决方案

    - **在从库操作**:如果系统有主从复制环境,可以在从库上执行删除操作,然后进行主备切换。但这种方法成本较高,因为需要中断主库服务并进行切换。 - **使用Percona Server**:Percona Server 5.1.58及以上版本...

    彻底删除mysql数据库(压缩版)

    mysql压缩版彻底删除方法,有图文介绍!由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务。

    批量删除MySQL数据库相同前缀的数据表 v1.0

    它会根据用户输入的参数,连接到MySQL数据库,查询所有匹配前缀的表,并执行删除操作。这个脚本可能包含SQL查询语句,以及错误处理和日志记录等功能。 在使用这个工具时,需要注意以下几点安全建议: - 在进行批量...

    mysql 基本操作 7.创建表以及删除表

    本教程将详细讲解如何进行MySQL中的表创建和删除操作。 一、创建表 在MySQL中,我们通常使用`CREATE TABLE`语句来创建新表。创建表的基本语法如下: ```sql CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据...

    mysql中多表删除其中ID相同记录的方法

    在MySQL数据库中,多表删除是一项常见的操作,特别是在数据整理或清理时,可能需要删除多个表中具有相同ID的记录。传统的SQL语法可能只允许单表删除,但在MySQL 4.0及以上版本,引入了对多表删除的支持,使得这个...

Global site tag (gtag.js) - Google Analytics