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连接,我发现一旦其中一条条件不存在对应数据项,则两个表都不会删除数据。

两个都有缺点,暂无完好的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值