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