数据库总结:
一、设计表三大范式:
1NF:列的原子性;数据表的每一列保证原子性,即不可拆分
2NF:在1NF的基础上,必须要有主键,且其他列必须完全依赖主键,而不是依赖主键的一部分
3NF:在2NF的基础上,其他列必须直接依赖不能间接依赖或传递依赖
二、事务:
1、常见操作,创建事务,提交事务,回滚事务
2、特性:ACID
原子性:每个事务要么一起成功,要么一起失败
一致性:事务操作数据库的前后保证数据整体的一致性
隔离性:并发执行的事务彼此隔离,不不干扰
持久性:事务对数据库的修改为永久的
3、并发问题:脏读,幻读,不可重复读
脏读:a事务在执行过程中未提交,b事务读取到了a事务执行过程中的数据,最后a事务回滚
幻读与不可重复读:幻读和不可重复读都是提交了上一条事务已经提交的结果,不可重复读重点在于delete和update,幻读在于insert
4、隔离级别:读未提交,读已提交,可重复读,串行化
读未提交(最低级别):任何情况都无法保证
读已提交:可避免脏读的发生
可重复读:可避免脏读和不可重复读
串行化(最高级别):能够避免脏读,幻读,不可重复读
三、锁
1、锁模式:共享锁(读所),排它锁(写锁,x锁),更新锁(u锁)
2、锁的粒度类型:
行锁粒度大,并发性最高
页锁:一次锁定一页
表锁:粒度小,并发性低
数据库锁:控制整个数据库的操作
3、乐观锁与悲观锁
乐观锁:假设不会冲突,每次访问数据库携带一个版本信息,所以在相应数据表就要加一个版本信息字段,用于判断是否执行更新操作,一般如果版本信息低于相应数据的版本信息,则不允许更新,反之,则允许更新
悲观锁:一定会冲突,因此是完全隔离的操作,每次对数据库进行更新,拿到锁,则转换为完全占有的状态,不允许其他人访问
一、设计表三大范式:
1NF:列的原子性;数据表的每一列保证原子性,即不可拆分
2NF:在1NF的基础上,必须要有主键,且其他列必须完全依赖主键,而不是依赖主键的一部分
3NF:在2NF的基础上,其他列必须直接依赖不能间接依赖或传递依赖
二、事务:
1、常见操作,创建事务,提交事务,回滚事务
2、特性:ACID
原子性:每个事务要么一起成功,要么一起失败
一致性:事务操作数据库的前后保证数据整体的一致性
隔离性:并发执行的事务彼此隔离,不不干扰
持久性:事务对数据库的修改为永久的
3、并发问题:脏读,幻读,不可重复读
脏读:a事务在执行过程中未提交,b事务读取到了a事务执行过程中的数据,最后a事务回滚
幻读与不可重复读:幻读和不可重复读都是提交了上一条事务已经提交的结果,不可重复读重点在于delete和update,幻读在于insert
4、隔离级别:读未提交,读已提交,可重复读,串行化
读未提交(最低级别):任何情况都无法保证
读已提交:可避免脏读的发生
可重复读:可避免脏读和不可重复读
串行化(最高级别):能够避免脏读,幻读,不可重复读
三、锁
1、锁模式:共享锁(读所),排它锁(写锁,x锁),更新锁(u锁)
2、锁的粒度类型:
行锁粒度大,并发性最高
页锁:一次锁定一页
表锁:粒度小,并发性低
数据库锁:控制整个数据库的操作
3、乐观锁与悲观锁
乐观锁:假设不会冲突,每次访问数据库携带一个版本信息,所以在相应数据表就要加一个版本信息字段,用于判断是否执行更新操作,一般如果版本信息低于相应数据的版本信息,则不允许更新,反之,则允许更新
悲观锁:一定会冲突,因此是完全隔离的操作,每次对数据库进行更新,拿到锁,则转换为完全占有的状态,不允许其他人访问