●事务的 ACID(acid) 属性
?1. 原子性 (Atomicity )
原子性是指事务是 - 一个不可分割的工作单位, 事务中的操作要么都发生, 要么都不发生.
?2. 一致性 (Consistency)
事务必须使数据库从一一个 -- 致性状态变换到另外一一个 -- 致性状态
?3. 隔离性 (Isolation)
事务的隔离性是指一 - 个事务的执行不能被其他事务干扰, 即一一个事务内部的操作及使用的数据对并发的其他事务是隔离的, 并发执行的各个事务之间不能互相干扰.
?4. 持久性 (Durability)
持久性是指 - 一个事务 - 一旦被提交, 它对数据库中数据的改变就是永久性的, 接下来的其他操作和数据库故障不应该对其有任何影响
●事务的类型
隐式事务: 事务没有明显的开启和结束的标记比如 insert,update, delete 语句
delete from: 表 where id =1;
显式事务: 事务具有明显的开启和结束的标记前提 , 必须先设置自动提交功能为禁用
set autocommit = 0;
●事务的使用
- # 步骤一: 开启事务
- set autocommit = 0;
- start transaction ; #可选的
- # 步骤二: 编写事务的 sql 语句 (select , insert , update , delete)
- SELECT * FROM sys;
- ...
- # 步骤三: 结束事务
- commit ; #提交事务
- #rollback; #回滚事务, 即使事务执行成功, 表中数据也不会保存在磁盘中, 但是会将事务中操作的表显示, 类似于 SELECT 出来的表可以显示但是不会保存
●示例
1) 成功执行
- DROP DATABASE IF EXISTS human;
- CREATE DATABASE IF NOT EXISTS human;
- USE human;
- CREATE TABLE man(
- id INT PRIMARY KEY AUTO_INCREMENT ,
- name VARCHAR(20) NOT NULL
- );
- SET AUTOCOMMIT = 0;
- START TRANSACTION;
- insert man
- VALUES (NULL,'archer'),(NULL,'saber'),(NULL,'lancer') ;
- #insert man
- #VALUES (NULL,NULL);
- SELECT * FROM man;
- COMMIT;
- #ROLLBACK; #这里不进行回滚操作, 如果需要回滚, 那么将 COMMIT 注释并撤销这句的注释就好
2) 失败执行 (事务中部分语句无法执行, 导致整个事务没有提交)
- DROP DATABASE IF EXISTS human;
- CREATE DATABASE IF NOT EXISTS human;
- USE human;
- CREATE TABLE man(
- id INT PRIMARY KEY AUTO_INCREMENT ,
- name VARCHAR(20) NOT NULL
- );
- SET AUTOCOMMIT = 0;
- START TRANSACTION;
- insert man
- VALUES (NULL,'archer'),(NULL,'saber'),(NULL,'lancer') ;
- insert man
- VALUES (NULL,NULL);# 这条语句无法执行
- SELECT * FROM man;
- COMMIT;
- #ROLLBACK;
来源: http://www.bubuko.com/infodetail-3054115.html