数据库相关认知

数据库优化

优化数据库从两个方面考虑,一个是安全,一个是性能;

首先从安全来说,为了防止数据库损坏丢失数据,往往会多配置一台数据库,一台为主,另一台为从,通过配置实现主从的关系,当主数据库损坏,从数据库通过二进制的日志文件把主数据库中的数据copy到从数据库中,通过keepalived进行监测,主数据库修复好后再用回主数据库。

性能上面是加引擎,设置主数据库为innodb,innodb涉及事务,只用来负责数据的更新操作;从数据库加myisam,myisam不涉及事务,用来做查询,实现读写分离;
所以一般上会先对表进行分析,是查询数据多还是更新数据多,从而进行分库

数据库事务的四种隔离级别。

  1. 读未提交:两个事务,一个事务对数据的操作还未提交,另一个事务可以立即看到,这种隔离级别会产生脏读,不可重复读和幻像读。
  2. 读已提交:两个事务,一个事务对数据的操作提交后,另一个才可以看到,避免了脏数据。该级别适应于大多数系统。
  3. 可重复读:两个事务,事务a获取一条数据,事务b在事务a提交前无法操作这条数据,避免了脏读,不可重复读。但是可能出现幻像读。
  4. 序列化:事务被处理为顺序执行,两个事物完全独立,其中一个事务的操作,对另一个事务完全没有影响

什么是脏数据,脏读,不可重复读,幻觉读?

  1. 脏读:
    指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
  1. 不可重复读:
    指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。 那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
  1. 幻觉读:
    指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

数据库共享锁和排它锁

  1. 共享锁:多个事务可封锁一个共享页,任何事物都不能修改该页,通常该页被读取完毕,锁立即被释放
  2. 排它锁:仅允许一个事务封锁该页,其他任何事务必须等到锁被释放才可以访问该页,该锁一致到事务完成后被释放

数据库的行锁和表锁

  1. 行锁:通过id进行访问锁定整行记录
  2. 表锁:通过id外的其他属性进行对表的访问,整张表锁定

数据库事务级联回滚

两个事务,事务a对数据进行读取操作,又进行了写操作,事务b对事务a进行读取,当事务a发生中断,开始回滚,事务b也开始回滚,两个事务产生级联的现象

数据库死锁的形成过程及检测原理

对数据库的某一张表进行操作,执行完毕后该条语句不提交,另一条语句执行相同的操作就会处于一种等待状态,前一条语句一直在执行,但一直没成功查到死锁的进程,直接kill掉

你可能感兴趣的:(数据库)