1.原子性(A):一个事务开始了,只有事务中的所有语句都执行成功了,提交完成了这才算一个事务,通俗的说就是一部小说从头到尾才算一部小说,分割了就不算一部小说了。(不可分割)
2.一致性(C):就是一种完整性状态转换为另外一种完整性状态,不允许数据库出现新老数据共存的状态。
3.隔离性(I):事务与事务之前是分隔的,通过锁机制来实现的,在下面的例子会表现的很清楚。
4.持久性(D):事务一旦被提交之后,数据就是事务修改后的状态永远不会变化的。即使宕机了,也可以通过磁盘恢复过来。
begin transaction //开始事务
................. // Sql语句
................. // Sql语句
commit //提交
rollback //回滚
show variables like '%commit%' // 查询当前会话环境变量
ps:环境变量分为:全局变量(global)和当前会话变量(session),show variables(当前会话变量)
创建一个用户表

创建两个查询会话框

set session autocommit = 0 //设置当前会话事务自动提交为OFF

start transaction // 开始事务
insert into user values('tom',10,1) // 插入一条数据

commit // 提交

通过上面可以知道,事务是相互隔离的,是不知道对方的,只有在提交之后其他事务才可以看到。
锁是保持事务隔离性的必要条件,锁可以保证事务的串行化操作。
锁的类型(这边只说明Innodb锁的类型:个人觉得BDB的锁类型已经不太适合当前时代对数据库的需求了。)
1.共享锁(lock in share mode ):允许多个事务读取同个数据,但是不允许其他事务加排它锁
2.排它锁(for update): 只允许自己更新,mysql的事务会默认给update,insert alter,delete这样一些操作默认加上排它锁。
3.innodb还有两种意向锁(表锁),这是内部自己调用的,就不多描述。