--第一步:将id=1的A账户余额减去100
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 第二步:将id=2的B账户余额加上100
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
复制
A:原子性:从 begin 开始一个事务,直到 commit 或者 rollback,中间执行的DML语句都属于一个整体,要么都commit,要么都rollback。 C:一致性:当开始一个事务,如果还没提交,数据库crash了,这时候恢复的时候就需要把事务回滚。同理,如果已经提交了,但是内存中的数据没写到磁盘,那么恢复的时候就需要前滚。 I:隔离性:会话1开始了一个事务,会话2开始的事务对于会话1的事务没有影响。同样的,会话1的事务对于会话2的事务没有影响,简单来说,多个事务间互不影响。 D:持久性:如果一个事务提交了,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。
1.脏读:事务A对数据作修改且未执行提交(commit),此时事务B在读取相同的记录则读取到了事务A没有提交的数据。 2.不可重复读:事务A中对同一行数据进行多次读取,在读取期间事务B对该行数据进行了修改,那么事务A会读取到提交后的数据,导致出现不一致的情况。 3.幻读:幻读指的是在同一事务下,当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。 4.丢失更新:丢失更新体现逻辑上,事务A的更新操作会被事务B覆盖。
Read Uncommitted(读取未提交内容)
Read Committed(读取提交内容)
Repeatable Read(可重读)
Serializable(可串行化)

共享锁(读锁 S Lock):允许一个事务去读一行记录,阻止其它事务获得相同数据集的排他锁。 排他锁(写锁 X Lock):允许获得排它锁的事务更新数据,阻止其它事务取得相同数据集的共享读锁和排他写锁。
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的 IS 锁。 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的 IX 锁。

The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.
Record Lock:单个行记录上的锁。 Gap Lock:间隙锁,锁定一个范围,而非记录本身。 Next-Key Lock:结合 Gap Lock 和 Record Lock,锁定一个范围,并且锁定记录本身。主要解决的问题是 RR 隔离级别下的幻读。
3.1 REDO

重做日志是在InnoDB层产生的 重做日志是物理格式日志,记录的是对每个页的修改 重做日志在事务进行中不断被写入

sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。设为1是最安全的,在系统故障时最多丢失一个事务的更新,但是会对性能有所影响。
3.3 UNDO

2.事务1更改该行的各字段的值

3.事务2修改该行的值





完
=end=
文章转载自数据库知多少,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。