zoukankan      html  css  js  c++  java
  • mysql删除表中的记录

      大家都知道,在MySQL中删除一个表中的记录有两种方法,一种是DELETE FROM TABLENAME WHERE... , 还有一种是TRUNCATE TABLE TABLENAME。

      DELETE FROM

      从 MySQL 数据表中删除数据,如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。可以在 WHERE 子句中指定任何条件。

      语法:

    DELETE FROM table_name WHERE column_name = some_value
    

      TRUNCATE TABLE TABLENAME

      删除表中的所有行,而不记录单个行删除操作。

      语法:

    TRUNCATE TABLE TABLENAME
    

      区别:

      1)DELETE FROM语句可以使用WHERE 对要删除的记录进行选择,TRUNCATE TABLE 将删除表中的所有记录,so,DELETE FROM更灵活。

      2)如果DELETE FROM 不加WHERE条件,那么他和TRUNCATE TABLE 是一样的,唯一的区别就是DELETE FROM删除后返回被删除的记录数,而TRUNCATE TABLE返回的是0。

      3)如果一个表中有自增的字段,这时使用DELETE和TRUNCATE删除表中所有数据时,如果表中有自增字段,则自增字段将起始值恢复为1,如果不想恢复,则可以在DELETE时加上WHERE的永真条件,使用DELETE FROM TABLENAME WHERE 1即可,但在这样做时会有一些缺点,即扫描表中的每一行记录,所以虽然可以保持自增的最大值,但他的执行成本要比没有WHERE条件的DELETE以及TRUNCATE大得多的多。

      4)当表中的数据比较多时,删除全表数据建议使用TRUNCATE TABLE,TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,而DELETE FROM则是将数据一行一行的删除,每删除一行,还要在事务日志中为所删除的行记录一项,贼慢。

      5)TRUNCATE TABLE删除后无法ROLLBACK,原因:TRUNCATE是一个DDL语句,将被隐式提交,不能使用ROLLBACK命令,而DELETE是DML语句,可以ROLLBACK(前提是DELETE操作没有COMMIT)

    注:SQL语言包括四种主要程序设计语言类别的语句:

      数据定义语言(DDL)主要表现为创建删除表,创建索引等;

      数据操作语言(DML)主要表现为对数据的追加,更新查询;

      数据控制语言(DCL)主要表现为授权(GRANT),撤销授权(REVOKE),拒绝授权(DENY);

      事务控制语言(TCL)主要表现为设置保存点(SAVEPOINT),回滚(ROLLBACK),提交(COMMIT)。

       总结:

      DELETE可以通过WHERE语句选择要删除的记录,但执行得速度不快,可以返回被删除的记录数,在未提交情况下可以回滚。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。

  • 相关阅读:
    自定义404页面
    authenticate的执行流程与重写
    装饰器login_required
    一、词法结构
    Django——用户认证
    多线程
    Django框架4——form表单
    Django框架3——模型
    Django框架2——模板
    Anaconda 安装tensorflow出现错误
  • 原文地址:https://www.cnblogs.com/zlnevsto/p/8868411.html
Copyright © 2011-2022 走看看