测试开发面试题汇总之数据库部分

1.数据库有哪些锁
  MySQL数据库中的锁有共享锁、排他锁、行锁、表级锁、行级锁以及页面锁。
2.1 共享锁(Shared Lock,也叫S锁)
  共享锁(S)表示对数据进行读操作,因此多个事物可以同时为一个对象加锁。这个事物释放锁之前,其他事物不能对该对象进行更新操作。
 2.2 排他锁(Exclusive Lock,也叫X锁)
  排他锁表示对数据进行写操作,如果一个事物给一个对象添加了排他锁,其他事物就不能给他加其他锁。
2.3 行锁
  行锁表示对一条记录加锁,只影响一条记录。通常用在DML语句中,如INSERT, UPDATE, DELETE等。
  有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
2.4 锁的密度
  根据锁的级别或密度来划分,MySQL有三种锁的级别:页级、表级、行级。
表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。
  行级锁
  也是目前各大数据库管理软件所实现的锁定颗粒度最小的。消耗大,易发生死锁。
页面锁
  另外,页级锁定和行级锁定一样,会发生死锁。
  
2.死锁如何防范
死锁发生的条件:
1、资源不能共享,需要只能由一个进程或者线程使用
2、请求且保持,已经锁定的资源自给保持着不释放
3、不剥夺,自给申请到的资源不能被别人剥夺
4、循环等待
防范:1.尽量避免并发的执行涉及到修改数据的语句。
2.编写应用程序,让进程持有锁的时间尽可能短,这样其它进程就不必花太长的时间等待锁被释放。

3.数据库的索引
4.事务的特性

你可能感兴趣的:(面试)