mysql 进阶 (二十一) 删除表数据与数据库四大特性
一、DELETE
与 TRUNCATE
在 MySQL 中有两种方法可以删除数据,一种是DELETE
语句,另一种是TRUNCATE TABLE
语句。DELETE
语句可以通过WHERE
对要删除的记录进行选择。而使用TRUNCATE TABLE
将删除表中的所有记录。因此,DELETE
语句更灵活。
如果要清空表中的所有记录,可以使用下面的两种方法:
其中第二条记录中的 TABLE 是可选的。
如果要删除表中的部分记录,只能使用DELETE
语句。
如果DELETE
不加WHERE
子句,那么它和TRUNCATE TABLE
是一样的,但它们有一点不同,那就是DELETE
可以返回被删除的记录数,而TRUNCATE TABLE
返回的是 0。
如果一个表中有自增字段,使用TRUNCATE TABLE
和没有WHERE
子句的DELETE
删除所有记录后,这个自增字段将起始值恢复成 1。如果你不想这样做的话,可以在DELETE
语句中加上永真的WHERE
,如WHERE 1
或WHERE true
。
上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE
条件永远为true
。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE
子句的DELETE
大得多。
DELETE
和TRUNCATE TABLE
的最大区别是DELETE
可以通过WHERE
语句选择要删除的记录,但执行速度不快。
truncate
删除后不记录mysql
日志,不可以恢复数据。delete
的效果有点像将mysql
表中所有记录一条一条删除到删完,而truncate
相当于保留mysql
表的结构,重新创建了这个表,所有的状态都相当于新表,而且还可以返回被删除的记录数。而TRUNCATE TABLE
无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
和标准的 SQL 语句不同,DELETE
支持ORDER BY
和LIMIT
子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE
子句过滤出来的记录的一部分,可以使用LIMIT
,如果要删除后几条记录,可以通过ORDER BY
和LIMIT
配合使用。假设我们要删除 users 表中 name 等于"Mike"的前 6 条记录。可以使用如下的 DELETE 语句:
一般MySQL
并不确定删除的这 6 条记录是哪 6 条,为了更保险,我们可以使用ORDER BY
对记录进行排序。
二、数据库事务四大特性
2.1 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS 必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
2.2 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
一致性处理数据库中对所有语义约束的保护。例如,当数据库处于一致性状态 S1 时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态 S2。
2.3 分离性
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
分离性是 DBMS 针对并发事务间的冲突提供的安全保证。DBMS 可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
DBMS 可以在并发执行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的 DBMS 需要更多的开销。
2.4 持久性
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS 保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。所以,持久性主要在于 DBMS 的恢复性能。持久性通过数据库备份和恢复来保证。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/002352fc271c01a1cc7ccb375】。文章转载请联系作者。
评论