mysql支持跨表delete删除多表记录_Mysql

前几天写了Mysql跨表更新的一篇总结,今天我们看下跨表删除。
在Mysql4.0之后,mysql开始支持跨表delete。
Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录。
假定我们有两张表:Product表和ProductPrice表。前者存在Product的基本信息,后者存在Product的价格。
第一种跨表删除的方式是不用join,在delete时指定用半角逗号分隔多个表来删除,如下sql语句:

复制代码 代码如下:

DELETE p.*, pp.*
FROM product p, productPrice pp
WHERE p.productId = pp.productId
AND p.created < '2004-01-01'

第二种跨表删除的方式是使用inner join在join中指定两表之间的关联关系,如下sql语句:

复制代码 代码如下:

DELETE p.*, pp.*
FROM product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
WHERE p.created < '2004-01-01'

注意:跨表删除不必删除所有表的数据,上面的sql语句表会同时删除Product和ProductPrice两张表中的数据,但是你可以指定 DELETE product.*从而只删除product表中的记录,而不处理ProductPrice表中的记录。

跨表删除也可以使用left join,例如我们要删除所有在ProductPrice表中没有记录的Product表记录。如下sql语句:

复制代码 代码如下:

DELETE p.*
FROM product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
WHERE pp.productId is null

跨表删除很有用,在需要的时候就用它吧。欢迎阅读另外一篇关于跨表更新的介绍文章

时间: 2024-09-15 04:51:58

mysql支持跨表delete删除多表记录_Mysql的相关文章

在oracle一个有60万记录的表中删除几十条记录怎么用了很长时间?

oracle 在oracle一个有60万记录的表中删除几十条记录怎么用了很长时间?

使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?

问题描述 使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?谢谢 解决方案 解决方案二:deletefrom[表名]where[主关键字]=你要删的主关键字.解决方案三:deletefrom表where主键解决方案四:DimconAsNewSystem.Data.OleDb.OleDbConnectioncon.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;datasource=数据库文件;userid=;pass

MYSQL中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里有匹配的

mysql创建数据表与删除数据表

创建数据表利用 命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]); 语法:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  例  代码如下 复制代码 mysql> create table MyClass(

mysql delete 删除一条记录简单方法

mysql教程 删除一条记录简单方法,应该说是最简单的入门级的了,下面我们来看看如何利用mysql sql语句来删除一条记录吧. mysql>delete from 表名 where id=1; query ok, 这样就可以删除了, 如果你和php教程 mysql配置只要利用php连接到数据库教程再用php mysql_query("delete from 表名 where id=1");就可以删除了. <?php $con = mysql_connect("l

【求助】从大表中删除小表中存在的记录问题

A表:30万,主键ID B表:300万,主键ID 从B表中删除ID=A表ID的记录. DELETE FROM B WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM (SELECT T.ID, ROWNUM RN FROM A) WHERE RN > 0 AND RN <= 50000) AB WHERE A.ID = B.ID); 但执行计划显示COST较大,且瓶颈是B表的全表扫描. 需求是这里有B1 ... B10多个B表(都是300万),串行操作相当于

MySQL中用户授权以及删除授权的方法_Mysql

用户授权方法 你可以通过发出GRANT语句增加新用户: shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH

MySQL中UPDATE与DELETE语句的使用教程_Mysql

UPDATE 更新UPDATE SET 语法用于修改更新数据表中的数据. 语法: UPDATE tb_name SET column1 = new_value1,column2 = new_value2,- WHERE definition 该语法将数据表中符合 WHERE 条件的记录中的 column1 的值更新为 new_value1,column2 的值更新为 new_value2 ,以此类推.如果省略 WHERE 条件,则会将表中所有记录的 column 值进行更新. 例子: <?php

MySQL查看、创建和删除索引的方法_Mysql

本文实例讲述了MySQL查看.创建和删除索引的方法.分享给大家供大家参考.具体如下: 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有3个未索引的表t1.t2.t3,分别只包含列c1.c2.c3,每个表分别含有1000行数据组成,指为1-1000的数值,查找对应值相等行的查询如下所示. SELECT c1,c2,c3 FROM t1,t2,t3