mysql delete join语法_mysql之delete语法
一:DELETE语法
以往用delect删除表数据是都是单表(一个表)删除。对于关联表,往往都是先删除第一个表的数据,然后再写另一个delect语句删除另一个表的数据(浪费时间,又影响性能,与数据库交互两次)。通过查阅官方文档的delect语法。有一些新的感悟。
1.1:单表语法(完整语法)
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROMtbl_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[.*]] ...FROMtable_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 BY或LIMIT在多表中DELETE。该table_references子句列出了连接中涉及的表。
对于第一个多表语法,仅FROM删除子句之前列出的表中的匹配行。对于第二个多表语法,仅删除FROM子句(在USING子句之前)中列出的表中的匹配行。结果是您可以同时从多个表中删除行,并具有仅用于搜索的其他表:
语法1
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOINt3WHERE t1.id=t2.id AND t2.id=t3.id;
语法2:
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOINt3WHERE 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 ASa2WHERE a1.id=a2.id;DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 ASa2WHERE a1.id=a2.id;
注意不要写成:(定义标的别名要在from后面)DELETE t1 AS a1, t2 AS a2 FROM t1 INNER JOINt2WHERE a1.id=a2.id;DELETE FROM t1 AS a1, t2 AS a2 USING t1 INNER JOINt2WHERE a1.id=a2.id;
mysql delete join语法_mysql之delete语法相关推荐
- mysql数据库语法_MySQL数据库基本语法
SQL WHAT(SQL是什么?) Structured Query Language:结构化查询语⾔ WHY(为何要使用SQL?) 难道仅仅使用SQL Server Management Studi ...
- mysql right join实例_MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程
LEFT JOIN 语法用法与实例MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT ...
- mysql natural join用法_MySQL NATURAL JOIN
NATURAL JOIN 也叫自然连接,实际是属于 JOIN 的一种. MySQL NATURAL JOIN 语法如下: ... FROM table1 NATURAL JOIN table2 ... ...
- mysql left join 空值_MySQL LEFT JOIN NULL值
这个问题更多的是2012年3月回复的问题.由于这是4个月后,我提出了一个新问题.参考:MySQL LEFT JOIN - Values can be NULL 我的SQL语句如下所示: SELECT ...
- mysql 索引语法_MySQL 索引:语法及案例剖析
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...
- mysql delete in死锁_mysql 执行delete引发死锁问题
关于mysql事务引发的死锁异常解决 场景 问题 死锁日志[^2] 锁类型与隔离级别 InnerDB 锁: mysql事务 解决方案 场景 mysql 5.7 InnoDB存储引擎 jdk 8 spr ...
- mysql外键引用语法_mysql – 外键语法
我先创建了Teacher表,其描述是 mysql> desc teacher; +--------------+-------------+------+-----+---------+---- ...
- mysql查询数据不变_mysql之delete删除记录后数据库大小不变
当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. dele ...
- mysql特有语法_MySQL 独有SQL语法汇总(一)
连接 主机名 端口 一个合法用户 用户口令 Mysql -u root -p -h myserver -P 9999 选择数据库 可使用USE关键字,mysql语言组成部分的一个关键字,绝不要使用关键 ...
最新文章
- springCloud全家桶
- IBastis配置实例
- 小程序统一服务消息_微信团队发布小程序模板消息能力调整通知:小程序订阅消息接口正式上线...
- c语言调用子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
- android 开发规范
- EF更新指定字段...
- php authorization,PHP CURL设置Authorization
- 使用本地计划任务定时关闭azure虚拟机
- 开启3389常用终端命令
- 抛出与抽象相对应的异常(61)
- TechNet Plus订阅版再度推出6折优惠
- openstack手动部署简单记录
- 迷宫算法总结(最短路径)
- html中怎么去除多余的代码,去除HTML代码中所有标签的两种方法
- bzoj 4518: [Sdoi2016]征途
- ubuntu shell命令划重点
- Buffer(缓冲器)
- js pug 代码_Vue项目中配置pug解析支持
- 【this,super关键字使用】经典习题
- 4.ERC20常用查询操作