写点什么

mysql 进阶 (二十一) 删除表数据与数据库四大特性

  • 2022 年 8 月 02 日
  • 本文字数:1905 字

    阅读完需:约 6 分钟

mysql进阶(二十一)删除表数据与数据库四大特性

一、DELETETRUNCATE

在 MySQL 中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。

      如果要清空表中的所有记录,可以使用下面的两种方法:

     

 DELETE FROM table1; TRUNCATE TABLE table1;
复制代码


      其中第二条记录中的 TABLE 是可选的。

      如果要删除表中的部分记录,只能使用DELETE语句。

       

DELETE FROM table1 WHERE ...;
复制代码

      如果DELETE不加WHERE子句,那么它和TRUNCATE TABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是 0。

      如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成 1。如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1WHERE true

     

 DELETE FROM table1 WHERE 1;
复制代码

       上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。  

      DELETETRUNCATE TABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录,但执行速度不快。

      truncate删除后不记录mysql日志,不可以恢复数据。delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表,而且还可以返回被删除的记录数。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。

      和标准的 SQL 语句不同,DELETE支持ORDER BYLIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIT,如果要删除后几条记录,可以通过ORDER BYLIMIT配合使用。假设我们要删除 users 表中 name 等于"Mike"的前 6 条记录。可以使用如下的 DELETE 语句:

     

DELETE FROM users WHERE name = 'Mike' LIMIT 6;
复制代码

      一般MySQL并不确定删除的这 6 条记录是哪 6 条,为了更保险,我们可以使用ORDER BY对记录进行排序。

     

 DELETE FROM users WHERE name = 'Mike' ORDER BY id DESC LIMIT 6;
复制代码

​二、数据库事务四大特性

2.1 原子性

  事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。

  事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。

   假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS 必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。

2.2 一致性

      事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。

      一致性处理数据库中对所有语义约束的保护。例如,当数据库处于一致性状态 S1 时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态 S2。

2.3 分离性

      分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。

      分离性是 DBMS 针对并发事务间的冲突提供的安全保证。DBMS 可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。

      DBMS 可以在并发执行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的 DBMS 需要更多的开销。

2.4 持久性

  持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS 保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。所以,持久性主要在于 DBMS 的恢复性能。持久性通过数据库备份和恢复来保证。

发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
mysql进阶(二十一)删除表数据与数据库四大特性_MySQL_No Silver Bullet_InfoQ写作社区