| 是数据库管理系统中一个排序的数据结构,根据不同的存储引擎索引分为Hash索引、B+树索引等。常见的InnoDB存储引擎的默认索引实现为:B+树索引。索引可以协助快速查询、更新数据库表中数据。 |
| 事务是一系列的操作,需要要符合ACID特性,即:事务中的操作要么全部成功,要么全部失败。 |
特点:
| Atomicity 原子性 |
| Consistency 一致性 |
| Isolation 隔离性 |
| Durability 耐久性 |
| 原子性:所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。 |
| |
| 初中知识:原子是物质的构成单元之一,具备化学不可分割性 |
| 在一个事务工作单元中,所有标准事务语句(DML),要么全成功,要么全回滚。 |
| 一致性:如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。 |
| |
| 事务发生前、中、后都应该保证数据始终一致状态 |
| MySQL的各项功能的设置,都是最终要保证一致性。 |
| |
| 例如: |
| 一个转账事务,里面有两条sql语句,一条是张三减少100元,另一个是李四加100元 |
| 转账前: |
| 张三:500元 |
| 李四:500元 |
| 总额:1000元 |
| |
| 事务执行完成后,即转账后 |
| 张三:400元 |
| 李四:600元 |
| 两个人总钱数:1000元 |
| |
| ps:前后数据类型也要保持一致 |
| 隔离性:事务之间不相互影响。 |
| mysql支持多事务并发工作的系统。 |
| a工作的时候不能收到其他事物的影响 |
| 持久性:事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。 |
| |
| 当事务提交(commit命令执行成功后,此次事务操作的所有数据“落盘”),都要永久保存下去。不会因为数据实例发生故障。 |
| 允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据。 |
| |
| 有可能出现的问题: |
| 脏页读,不可重复读,幻读 |
| 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 |
| |
| 有可能出现的问题: |
| 不可重复读,幻读 |
| 可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 |
| |
| 有可能出现的问题: |
| 幻读,但是可以通过其他手段防止幻读出现。 |
| 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。 |
| 串行化事务。以上问题都能规避,但是不利于事务的并发。 |
| 1)读到别人在内存中未提交的数据。(只begin未commit,但是其他用户看到了) |
| 2)内存缓存原因,直接读脏页数据 |