一:DELETE语法

  以往用delect删除表数据是都是单表(一个表)删除。对于关联表,往往都是先删除第一个表的数据,然后再写另一个delect语句删除另一个表的数据(浪费时间,又影响性能,与数据库交互两次)。通过查阅官方文档的delect语法。有一些新的感悟。

1.1:单表语法(完整语法)  

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name  #()
[PARTITION (partition_name [, partition_name] ...)] #(分区)
[WHERE where_condition] #(删除条件)
[ORDER BY ...] #(删除顺序)
[LIMIT row_count] #(现在一次删除的数量)

对于[]里面都是一些可选阐述,对于每个参数的意思我也是大概了解,在此我就不多做解释了,有兴趣的课参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/delete.html

1.2:多表语法(本次重点)

  语法1:  

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition] DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]

1.3:多表删除

  您可以在DELETE语句中指定多个表,以 根据WHERE子句中的条件从一个或多个表中删除行 。您不能使用ORDER BYLIMIT在多表中 DELETE。该 table_references子句列出了连接中涉及的表。

  对于第一个多表语法,仅FROM删除子句之前列出的表中的匹配行。对于第二个多表语法,仅删除FROM子句(在USING子句之前)中列出的表中的匹配行。结果是您可以同时从多个表中删除行,并具有仅用于搜索的其他表:

  语法1

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

  语法2:

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

   例如:删除一班班集(id =1)和一班所有的学生(学生的班级classes.id=1)

  DELETE classes ,students FROM students INNER JOIN classes WHERE classes.id = 1 AND students.`class_id` = 1;

注意:我上面用的是inner join 关联也可用outer join(是默认关联语法),但推荐用inner join因为inner join是取得两表的交集(outer join也可以取交集),省去了一些麻烦,也可规避一些误操作。具体细节可关联查询细节

备注:前面的示例使用INNER JOIN,但多表DELETE语句可以使用语句中允许的其他类型的连接 SELECT,例如 LEFT JOIN。例如,要删除不存在t1匹配项的行 t2,请使用LEFT JOIN

1.4:使用别名(alise)

  多表中的表别名 DELETE只应table_references在语句的部分声明。在其他地方,允许别名引用但不允许别名声明。

  语法:

DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2
WHERE a1.id=a2.id; DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2
WHERE a1.id=a2.id; 注意不要写成:(定义标的别名要在from后面)
DELETE t1 AS a1, t2 AS a2 FROM t1 INNER JOIN t2
WHERE a1.id=a2.id; DELETE FROM t1 AS a1, t2 AS a2 USING t1 INNER JOIN t2
WHERE a1.id=a2.id;

  

mysql之delete语法的更多相关文章

  1. 对MySQL DELETE语法的详细解析

    以下的文章主要描述的是MySQL DELETE语法的详细解析,首先我们是从单表语法与多表语法的示例开始的,假如你对MySQL DELETE语法的相关内容十分感兴趣的话,你就可以浏览以下的文章对其有个更 ...

  2. mysql数据库delete数据时不支持表别名

    今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4 ...

  3. 转】mysql数据库delete数据时不支持表别名

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4012853.html 感谢! 今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELE ...

  4. MySQL的一些语法总结

    初学MySQL,今天遇到了一个问题,然后汇总了一下MySQL的一些语法 1. date和datetime类型是不同的 date只记录日期(包括年月日),datetime记录日期和时间(包括年月日时分秒 ...

  5. sql点滴41—mysql常见sql语法

    原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...

  6. MySQL中show语法使用总结

    MySQL中 show 语法的使用: 先查看MySQL版本信息: mysql> select version(); +------------+ | version() | +--------- ...

  7. mysql中delete的表别名使用方法

    在 mapper.xml 中的 dynamicWhere 动态查询中使用了表别名,Delete 语句引用了动态查询,如下: <delete id="delete" param ...

  8. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  9. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

随机推荐

  1. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  2. eclipse的常用设置

    参考文档:https://www.cnblogs.com/maoniu602/p/3585049.html 版本和jdk的版本搭配问题 eclipse和JDK版本应搭配,而且,若使用32位则都使用32 ...

  3. git clean 删除忽略文件 和 未被跟踪文件及文件夹

    git clean 删除忽略文件 和 未被跟踪文件及文件夹 概念 首先我们需要认清 忽略的文件 和 未被跟踪的文件 忽略的文件:.gitignore 中忽略的文件 未被跟踪的文件:没有被忽略,但是还没 ...

  4. caffe编译错误记录

    1. caffe.pb.h丢失问题 错误代码如图: zhuoshi@zhuoshi-SYS-7048GR-TR:~/ZSZT/Geoffrey/caffe/caffe-master$ make all ...

  5. 09-Python入门学习-函数基础与参数

    一.函数基础 1.定义函数的三种形式 1.1 无参函数 def foo(): print('from foo') foo() 1.2 有参函数 def bar(x,y): print(x,y) bar ...

  6. mysql命名规范

    1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写. (2)数据库表名应该有意义,并且易于理解,最好使用可以 ...

  7. .Net Core 部署 CentOs7+Nginx

    先爆图 由于是初学者,部署出来这个界面也不容易,此前第一步弄了个这个出来 动态的没问题,然后静态资源死活就是不出来,弄了两个小时没有结果,带着遗憾睡了个觉 试验1: server { listen ; ...

  8. [LeetCode] Score of Parentheses 括号的分数

    Given a balanced parentheses string S, compute the score of the string based on the following rule: ...

  9. [LeetCode] Positions of Large Groups 大群组的位置

    In a string S of lowercase letters, these letters form consecutive groups of the same character. For ...

  10. Android Gradle Task

    Tasks runnable from root project ------------------------------------------------------------ Androi ...