bitsCN.com
MySQL事物 ACID指出每个事物型RDBMS必须遵守4个属性,及原子性、一致性、孤立性和持久性。通过InnoDB和BDB类型表,MySQL事物能够完全满足事物安全的ACID测试,但不是所有类型都支持事物,如MyISAM类型表就不能支持事物,只能通过伪事物对表实现事物处理。
默认情况下InnoDB表持久性最长,MyISAM表提供部分持久。 MySQL事物的创建与存在周期 如果用户想让数据表支持事物处理能力,必须将当前操作数据表的类型设置为InnoDB或BDB。创建InnoDB或BDB类型的数据表,基本命令结构:
CREATE TABLE table_name(field-defintions) TYPE = INNODEB/BDB;
更改数据表类型:
ALTER TABLE table_name TYPE = INNODB/BDB;
注意:应用ALTER TABLE操作肯能会导致数据库中数据丢失,因此为了避免非预期结果出现,在使用该命令之前,用户需要创建一个表备份。创建事物的一般过程: 初始化事物
START TRANSACTION;创建事物
应用SELECT语句查看数据是否被正确输入提交事物
COMMIT撤销事物ROLLBACK1
如果执行一个回滚操作,则在START TRANSACTION命令后的所有SQL语句都将执行回滚操作。如果开启事物后,没有提交事物,则事物默认为自动回滚状态,即不保存用户之前的任何操作。事物的存在周期
事物不支持嵌套功能,当用户第一个事物未结束又开始第二个事物时,则前一个事物会自动提交,同样MySQL中很多命令都会隐藏执行COMMIT 命令。 MySQL行为 自动提交控制MySQL自动提交参数,可以通过AUTOCOMMIT变量更改提交模式
SET AUTOCOMMIT=0;
只有当用户输入COMMIT命令后,MySQL才将数据表中的资料提交到数据库中,如果不提交事物,而终止MySQL会话,数据库将会自动执行回滚操作。
通过 select @@autocommit; 变量来查看当前自动提交状态事物的孤立级
SERIALIZABLE(序列化)
REPEATABLE READ (可重读性)
READ COMMITTED (提交后读)
READ UNCOMMITTED(未提交读) 获取当前事物孤立级别的命令:
SELECT @@tx_isolation;修改事物的孤立级
set global transaction isolation level 孤立级;
如果用户要想修改事物的孤立级,必须首先获取SUPER优先权,以便用户可以顺利执行修改操作。 事物和性能 应用小事物选择合适的孤立级避免死锁 MySQL伪事物 用表锁定代替事物 为指定数据表添加锁定
LOCK TABLES table_name lock_type,...用户执行数据表的操作,可以添加、删除或者更新部分数据。解锁
UNLOCK TALBES; 应用表锁实现伪事物
bitsCN.com