数据库
事务:一系列操作统称事务;
事务的特性:原子性,一致性,隔离性,持久性
一致性:保证一个用户正在修改未提交时,其他用户读到的是修改前的临时表的数据。等提交后读到的是新数据,保证了数据库的一致性。
隔离性:
脏读
原因:主要针对select,用户A更改了数据并未提交,用户B在select时候能查到用户A未提交的数据。
解决:设置隔离级别为读提交,利用快照读只读已经完成提交的数据。
不可重复读
原因:主要针对update,用户A查询了数据后,用户B更新了数据值,等用户A再次查询数据时发现两次数据值不一样。
解决:设置隔离级别为可重复读,利用快照读,当A事务启动后不允许再修改数据,保证了可重复读,避免不了幻读
幻读
原因:主要针对insert delete,用户A查询了数据后,用户B插入了一条新数据或者删除了一条数据。等用户A再次读的时候发现数据数量两次不一样。
解决:设置隔离级别为串行化,一个一个的事务施行,执行效率极差,开销贼大。
索引的目的:
提高检索效率,单纯为检索而生
当一个表中有大量记录时,为表中的某一个字段建立索引,不用从头遍历整个表来查找,而是可以通过索引来快速查找。
索引会增加数据库存储空间,每次修改表数据时索引也要修改.
索引中不能包含空值的列,如果组合索引中有一个是空值那么整条索引都是无效的
唯一索引:索引对应的列是唯一的,不允许有空值
主键索引:
组合索引:索引中包含多个字段
连接查询:
左连接 left join
右连接 right join
内连接 inner join
全连接 full join