`

MySQL一次删除两张表

阅读更多

今天遇到了同时删除两张表的问题,试了很多方法都没成功,如果在hibernate的话那就简单了直接使用级联就okay了,但用sql语句一时还是没做出来在网上找到了解决方法(我用的第三种方法):

商品表(product):id  name

图片表(image):id product_id name

对于这两张表,图片表里面关联了商品表的id属性,在我们删除商品的同时就要把它对应的图片信息也得删掉。对于这种情况在可以参照一下的delete语句:

1、delete from t1 where 条件
2、delete t1 from t1 where 条件
3、delete t1 from t1,t2 where 条件
4、delete t1,t2 from t1,t2 where 条件

前3者是可行的,第4者不可行。
也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,
在两个表之间建立级联删除关系,则可以实现删除一个表的数据时,同时删除另一个表中相关的数据。


1、从数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉

delete t1 from t1,t2 where t1.id=t2.id

delete from t1 using t1,t2 where t1.id=t2.id

2、从数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉

delete t1 from t1 left join t2 on t1.id=t2.id where t2.id is null

delete from t1,using t1 left join t2 on t1.id=t2.id where t2.id is null

3、从两个表中找出相同记录的数据并把两个表中的数据都删除掉

delete t1,t2 from t1 left join t2 on t1.id=t2.id where t1.id=25

注意此处的delete t1,t2 from 中的t1,t2不能是别名
如:delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25
在数据里面执行是错误的(mysql 版本不小于5.0在5.0中是可以的)

上述语句改写成:
delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id
where table_name.id=25
在数据里面执行是错误的(mysql 版本小于5.0在5.0中是可以的)

附:上述语句运行的环境 mysql 4.0.2以上

分享到:
评论

相关推荐

    MySQL命令大全

    MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    mysql数据库的基本操作语法

    注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...

    MYSQL常用命令大全

    MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    记一次mysql根据.frm.ibd文件恢复数据

    记一次mysql根据.frm.ibd文件恢复数据 背景: 公司用的阿里云mysql 5.6数据库,阿里云的控制台上做了两天一备份的设置。当我发现我误操作drop了一张表之后,我从控制台上下载了备份的压缩包,解压之后拿到我drop的那...

    1.简单的定时在数据库添加数据 2.简单的Stream的使用 3.Excel使用jxl和poi框架的读取操作

    将所有的逻辑删除的数据 保存到一张历史数据表中,数据库有两张那个表 Student 每五分钟判断一个student数据中有没有新逻辑删除的数据 如果有将逻辑删除的数据保存到 oldstudent中 同时将student表中的逻辑删除的...

    sql总结.doc

    一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速 度。 2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来 与数据库提供的事务...

    C++课程设计基于Qt和MySQL的火车票管理系统源码(含项目说明).zip

    如果你第一次登录,则根据你的身份证号和姓名创建新的用户,但如果你未执行购票操作的话则不会在数据库中记录你的名字和身份证号。 点击取消退出程序。 管理员登录窗口** 你需要输入获知的管理员账号和密码。 点击...

    快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply 先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php?id=1 表示我...

    Mysql增删改查操作-易语言

    权限判断,有两张表,用户表和记录表。用户表就是登陆界面验证的,记录表就是主程序用的。在用户表有字段区分权限,不同的权限对于记录表有不同的操作权限  2.在登陆窗口,把账号设置为全局变量,准备在加载主界面...

    2009达内SQL学习笔记

    rollback:回溯,回溯到上次操作前的状态,把这次事务操作作废,只有一次(DDL和DCL语句会自动提交,不能回溯)。 可以用commit语句提交,这样就回溯不回了。 set pause on\off :设置分屏(设置不分屏) set pause...

    经典全面的SQL语句大全

     10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )  11、说明:四表联查问题: select * from a left ...

    GeneralLedger:总分类帐Web应用程序

    交易是根据两次记账系统添加的,其中每笔交易必须记录两次,一次作为借项,一次作为贷项。 如果没有交易,则可以将其删除。 交易可以删除或更新。 当删除或更新事务时,两个相应的条目也将被修改。 用户可以查看...

    Java常见面试题208道.docx

    165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 166.如何获取当前数据库版本? 167.说一下 ACID 是什么? 168.char 和 varchar 的区别是什么? 169...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    九九乘法表 44 实例036 用while循环计算1+1/2!+1/3!…1/20! 45 实例037 for循环输出空心的菱形 46 实例038 foreach循环优于for循环 47 实例039 终止循环体 48 实例040 循环体的过滤器 49 实例041 循环的极限 50 第3...

    Discuz 2.5 最新版

    与论坛紧密结合的特色广播功能,同一个主题两种浏览模式,让传统的以不同版块为入口的阅读模式,可以平滑的切换到以收听关系链为主的新阅读体验,互动统一,相辅相成;增加腾讯微博评论回流功能,分享到微博的帖子,...

    基于SpringMVC+Spring+MyBatis开发的个人博客网站-毕业设计.zip

    数据库乱码,在MySQL安装路径,比如(E:\MySQL\MySQL Server 5.5)下找到my.ini文件进入编辑,修改这两处地方为utf8,默认是拉丁文 character-set-server=utf8 default-character-set=utf8 本项目使用到的mail服务...

Global site tag (gtag.js) - Google Analytics