`
caiceclb
  • 浏览: 239278 次
  • 性别: 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误删除数据恢复

    当误执行了 DELETE 命令删除了数据后,可以考虑以下方法进行数据恢复: 立即停止对数据库的写入操作:一旦发现误删,应立即停止对数据库的写入操作,以免新的数据覆盖被删除的数据。 使用备份:如果你有数据库备份...

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

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

    mysql删除数据记录PPT

    DELETE语句主要是用来执行数据的删除操作。使用DELETE语句既可以删除满足条件的数据,也可以使用子查询删除指定条件的数据;既可以在数据表中删除数据记录,也可以在视图中删除数据记录。但是在视图中删除数据记录时...

    MySQL 删除数据表

    但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_name ; 在命令提示窗口中删除数据表 在mysql>命令提示窗口中删除数据表...

    C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

    鉴于MySQL数据库的流行与强大,决定多学习使用。...提供添加、修改、删除用户功能,同时,为了测试MySQL数据库的访问性能,提供批量数量添加测试功能,如批量添加10000个用户,看看数据库的执行效率。界面作如下布

    MySQL删除表数据的方法

    在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。  如果...

    MFC对mysql的添加删除修改

    实现对mysql数据库的添加删除查询修改功能!但修改删除总是执行第一条记录!求高手帮忙解决一下

    删除mysql数据表如何操作

    MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_name ; 在命令提示窗口中删除数据表 ...

    MySQL删除表操作实现(delete、truncate、drop的区别)

    本文主要讲mysql中三种删除表的操作,delete语句、truncate语句以及drop语句的区别: 简介 delete 1、删除整张表的数据: delete from table_name; 2、删除部分数据,添加where子句: delete from table_name ...

    【大厂面试题】史上最详细的一线大厂Mysql面试题详解及其答案MySQL执行计划及SQL优化

    【大厂面试题】史上最详细的一线大厂Mysql面试题详解MySQL执行计划及SQL优化 知识点标签:explain、sql优化、索引、sql性能问题 题目描述 MySQL执行计划及SQL优化 子查询 关联查询 效率问题 子查询就是查询中有嵌套...

    MySQL防止delete命令删除数据的两种方法

    方法一我常用的做法,就是在数据库中加一个删除标识字段,如: isdel=1 这样就代码... 您可能感兴趣的文章:mysql之delete删除记录后数据库大小不变mysql 删除操作(delete+TRUNCATE)mysql支持跨表delete删除多表记录MyS

    删除mysql服务

    HKEY_LOCAL_MACHINE/...经查,用以下方法可以删除垃圾服务,步骤如下: 1.依次打开“开始菜单——所有程序——附件” 2.右击“命令提示符”,单击“以管理员身份运行” 3.在命令提示符窗口下执行 sc delete 服务名

    在MySQL中删除表的操作教程

    下面是通用的SQL语法丢弃(删除)MySQL表: DROP TABLE table_name ; 从命令提示符删除表: 只需要在mysql>提示符下执行DROP TABLE SQL命令。 例子: 下面是一个例子,它删除表 tutorials_tbl: root@host# mysql -...

    MySql 5.1 参考手册.chm

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL...

    批处理文件实现执行Mysql 文件。

    使用批处理实现执行Mysql 文件的功能。

    多线程访问mysql数据库

    1.DBSqlMan是多线程访问mysql的动态库 2.mysql5,开源的windows下使用的mysql2次开发库,mysql官网上可以下载 3.testDb,简单的应用DBSqlMan的例子 整个工程已经在VS2005下运行通过,并在实际应用中使用过。提供了...

    MySQL 5.1中文手冊

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL...

    mysql表结构同步批处理[控制台][同navicat表结构同步][定时自动同步表结构][服务器]

    1、此工具可用来同步mysql表结构 2、使用批处理执行,可加入计划任务中,实现定时自动同步表结构 3、指定A机器的db1数据库和B机器的db2数据库,就会把db1的表结构同步到db2,并且不删除db2的旧数据 4、功能类似于...

    MySQL中的两种临时表

    这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)。  内部临时表  内部临时表是一种特殊轻量级的临时表,用来进行性能优化。这种临时表会被MySQL自动创建并用来存储...

    MySQL 5.1参考手册

    5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA ...

Global site tag (gtag.js) - Google Analytics