• 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;

      

  • 相关阅读:
    java private修饰符的作用域
    debug运行下报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2(转)
    非线程安全的HashMap 和 线程安全的ConcurrentHashMap(转载)
    【Java集合源码剖析】HashMap源码剖析(转)
    eclipse 解决乱码问题
    java替换txt文本中的字符串
    tomcat startup.bat 启动脚本(转)
    tomcat 点击startup.bat一闪而过
    tomcat 目录文件夹作用(转)
    引脚复用
  • 原文地址:https://www.cnblogs.com/jinliang374003909/p/10347671.html
Copyright © 2020-2023  润新知