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连接,我发现一旦其中一条条件不存在对应数据项,则两个表都不会删除数据。
两个都有缺点,暂无完好的解决方法。
分享到:
相关推荐
- 总是在执行删除操作前备份重要数据,以防不测。 - 如果有外键约束,删除操作可能会被阻止,除非先禁用约束或使用`CASCADE`选项来删除相关数据。 - 对于InnoDB表,`DELETE`操作会触发事务,可以回滚以防止意外更改...
在MySQL数据库管理中,有时可能会不小心执行了DELETE命令,导致数据丢失。面对这种情况,有多种方法可以帮助恢复误删除的数据。本文将重点介绍如何利用MySQL的二进制日志(binlog)以及my2sql工具来恢复数据。 首先,...
"mysql 一条语句删除多表" 的主题就是关于如何通过单个SQL语句来删除关联的多个表的数据,从而节省数据库连接资源和提高执行效率。下面将详细解释这一技术及其背后的原理。 首先,我们要理解的是SQL语言中的“JOIN...
MySQL分区表是一种优化大型数据表查询效率的技术,它将一个大表分成多个逻辑上相连但物理上独立的部分,每个部分称为一个分区。分区可以按照不同的策略进行,如范围、哈希、列表或复合分区。这样做有助于提高数据...
在MySQL数据库管理中,删除表数据是常见的操作,这可能是为了清理旧数据、测试环境的重置或数据更新。本文将详细介绍三种不同的方法来删除MySQL中的表数据,帮助你更有效地管理数据库。 ### 方法一:TRUNCATE TABLE...
在这个脚本中,可能包含了连接到MySQL数据库、查询所有具有特定前缀的数据表、并执行删除操作的逻辑。 在使用这个工具之前,确保你对数据库有完全的权限,并且已经备份了所有重要的数据。因为批量删除操作一旦执行...
在linux下通过shell指令实现按照用户指定的日期删除mysql中的表数据,不想收积分的,但是它最低收一分
SQL 脚本文件是一个包含一到多个 SQL 命令的 SQL 语句,我们可以将这些 SQL 脚本放在一个文本文件中,然后通过相关的命令执行这个 SQL 脚本文件。SQL 脚本文件的基本结构如下: -- 创建表,使用“--”进行注释 ...
` 类似于删除表,如果数据库不存在,则不会执行删除操作,确保安全。 四、删除MySQL服务 在Windows系统中: 1. 服务管理器:通过“服务”应用程序找到MySQL服务,停止并禁用,然后卸载MySQL Server。 2. 控制面板:...
7. 根据主键删除多条记录: 这种情况下,MySQL会锁定所有匹配的主键记录,确保删除操作的原子性。 8. 非唯一索引删除已标记为删除的记录: 如果记录已被标记为删除,但物理上仍然存在,删除操作依然会锁定这些...
例如,如果尝试从成绩表中删除一个学生编号,而该编号在学生信息表中作为外键存在且删除模式(ON DELETE)设置为RESTRICT,那么系统将不允许执行删除操作,以保持数据的一致性和完整性。在删除此类记录前,需要先...
执行这些语句后,MySQL将在执行DROP语句期间暂时忽略外键约束,允许你按任意顺序删除表。需要注意的是,`FOREIGN_KEY_CHECKS`变量是基于会话的,这意味着在关闭客户端或重新连接后,其值会恢复为默认(通常是1,即...
这里我们关注的是使用Shell脚本来实现MySQL从原表到历史表的数据迁移。这种自动化的方法可以帮助我们高效、准确地处理大量数据,同时减少人为错误。 首先,让我们深入理解`shell`脚本。Shell是Linux和Unix系统中的...
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
- **在从库操作**:如果系统有主从复制环境,可以在从库上执行删除操作,然后进行主备切换。但这种方法成本较高,因为需要中断主库服务并进行切换。 - **使用Percona Server**:Percona Server 5.1.58及以上版本...
mysql压缩版彻底删除方法,有图文介绍!由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务。
它会根据用户输入的参数,连接到MySQL数据库,查询所有匹配前缀的表,并执行删除操作。这个脚本可能包含SQL查询语句,以及错误处理和日志记录等功能。 在使用这个工具时,需要注意以下几点安全建议: - 在进行批量...
本教程将详细讲解如何进行MySQL中的表创建和删除操作。 一、创建表 在MySQL中,我们通常使用`CREATE TABLE`语句来创建新表。创建表的基本语法如下: ```sql CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据...
在MySQL数据库中,多表删除是一项常见的操作,特别是在数据整理或清理时,可能需要删除多个表中具有相同ID的记录。传统的SQL语法可能只允许单表删除,但在MySQL 4.0及以上版本,引入了对多表删除的支持,使得这个...
如果需要批量删除多张表的索引,可以编写一个脚本,循环遍历每张表并执行相应的`ALTER TABLE`命令。这可以通过读取`导出所有index.txt`文件,然后根据表名和索引名构建`ALTER TABLE`语句来实现。 在执行删除操作...