mysql之delete语法
⼀: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]  #(现在⼀次删除的数量)
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:多表删除
mysql帮助文档  您可以在语句中指定多个表,以 根据WHERE⼦句中的条件从⼀个或多个表中删除⾏ 。您不能使⽤ORDER BY或LIMIT在多表
中 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 stude
nts.`class_id` = 1;
注意:我上⾯⽤的是inner join 关联也可⽤outer join(是默认关联语法),但推荐⽤inner join因为inner join是取得两表的交集(outer join也可以取交集),省去了⼀些⿇烦,也可规避⼀些误操作。具体细节可关联查询细节
备注:前⾯的⽰例使⽤INNER JOIN,但多表语句可以使⽤语句中允许的其他类型的连接 ,例如 LEFT JOIN。例如,要删除不存在t1匹配项的⾏ t2,请使⽤LEFT JOIN:
1.4:使⽤别名(alise)
  多表中的表别名 只应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;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。