zoukankan      html  css  js  c++  java
  • 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]  #(现在一次删除的数量)

     对于[]里面都是一些可选阐述,对于每个参数的意思我也是大概了解,在此我就不多做解释了,有兴趣的课参考官方文档: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;

      

  • 相关阅读:
    二维几何前置知识
    点分治学习笔记
    $fhq-treap$学习笔记
    对拍使用方法
    2021.2.18-2021.5.18 三个月后端开发实习的学习路径
    蓝桥杯常考算法 + 知识点
    Linux
    Linux
    Intern Day112
    Linux上编译运行C/C++程序
  • 原文地址:https://www.cnblogs.com/jinliang374003909/p/10347671.html
Copyright © 2011-2022 走看看