【持久性】
事务一旦提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。需要
注意的是,只能从事务本身的角度来保证结果的永久性。
例如,在事务提交后,所有的变化都是永久的。即使当数据库因为崩溃而需要恢复时,也能
保证恢复后提交的数据都不会丢失。【崩溃恢复】
但如果是一些外部的原因,如 RAID 卡损坏,磁盘介质故障,自然灾害等原因导致数据库发
生问题,那么所有提交的数据也肯定是会丢失的。
因为事务的持久性只能从事务本身的角度来保证事务系统的高可靠性【High Reliability】,而
不是高可用性【High Avaliability】。对于高可用性的实现,事务本身无法保证,需要一些系
统架构来配合完成。
原子性、一致性、持久性通过数据库的 redo log 和 undo log 来完成。Redo log 一般又叫重做
日志,用来保证事务的原子性和持久性。Undo log 用来保证事务的一致性。
而隔离型由我们之后介绍的锁来实现。
MySQL InnoDB 存储引擎的 Redo log 和 undo log 我们会在初中部分给大家详细介绍。
问题三: 在 MySQL 面有哪些 SQL 语句会产生隐式提交?
1.DDL 语句:
ALTER 语句【ALTER DATABASE、ALTER TABLE、ALTER VIEW、ALTER PROCEDURE
等等】
CREATE 语句【CREATE DATABASE、CREATE TABLE、CREATE INDEX、CREATE VIEW】
DROP 语句【DROP DATABASE、DROP INDEX、DROP TABLE、DROP VIEW】
RENAME TABLE、TRUNCATE TABLE 等等
2.用来隐式地修改 MySQL 架构的操作:CREATE USER、DROP USER、GRANT、RENAME
USER、REVOKE、SET PASSWORD 等
3.管理维护语句: ANALYZE TABLE、CHECK TABLE、REPAIR TABLE、OPTIMIZER TABLE
等等
评论