Mysql

 

1、Mysql有哪些存储引擎:

InnoDB、MyISAM、Memory、NDB。InnoDB 现在是 MySQL 默认的存储引擎,?持事务、?级锁定和外键

 

2、InnoDB 和MyISAM 的区别

InnoDB ?持事务,MyISAM 不?持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之?; 2.InnoDB ?持外键,? MyISAM 不?持。对?个包含外键的 InnoDB 表转为 MYISAM 会失败

 

3、mysql索引类型:

1.普通索引:最基本的索引,它没有任何限制,值可以为空;仅加速查询

2.唯一索引:唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。简单来说:唯一索引是加速查询 + 列值唯一(可以有null)

3.主键索引:主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个。

4.组合索引:组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

5.全文索引:全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

 

4、数据库隔离机制有哪些?默认是什么?

1、READ-UNCOMMITTED(读未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

2、READ-COMMITTED(读已提交):允许读取并发事务已经提交的数据,可以阻?脏读,但是幻读或不可重复读仍有可能发?

3、REPEATABLE-READ(可重复读):对同?字段的多次读取结果都是?致的,除?数据是被本身事务??所修改,可以阻?脏读和不可重复读,但幻读仍有可能发?

4、SERIALIZABLE(可串?化):最?的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执?,这样事务之间就完全不可能产??扰,也就是说,该级别可以防?脏读,不可重复读以及幻读

Mysql默认的隔离级别就是可重复读

 

 

5、ACID — 事务基本要素

原子性/一致性/隔离性/持久性

 

6、什么是幻读,脏读,不可重复读呢?

脏读(Dirty Reads):事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

不可重复读(Non-Repeatable Reads):事务 A 多次读取同?数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同 ?数据时,结果不?致。

幻读(Phantom Reads):幻读与不可重复读类似。它发?在?个事务A读取了??数据,接着另?个并发事务B插?了?些数据时。在随后的查询中,事 务A就会发现多了?些原本不存在的记录,就好像发生了幻觉一样

幻读和不可重复读的区别: 不可重复读的重点是修改:在同?事务中,同样的条件,第?次读的数据和第?次读的数据不?样。(因为中间有其他事务 提交了修改)

幻读的重点在于新增或者删除:在同?事务中,同样的条件,,第?次和第?次读出来的记录数不?样。(因为中间有其他事务提交了插?/删除)

 

7、谈谈你对锁的了解,都了解哪些锁

数据库锁定机制简单来说,就是数据库为 了保证数据的?致性,?使各种共享资源在被并发访问变得有序所设计的?种规则。

表级锁:开销?,加锁快;不会出现死锁;锁定粒度?,发?锁冲突的概率最?,并发度最低(MyISAM 和 MEMORY 存储引擎采?的是表级锁)

?级锁:开销?,加锁慢;会出现死锁;锁定粒度最?,发?锁冲突的概率最低,并发度也最?(InnoDB 存储引擎既?持?级锁也?持表级锁,但默认情况下是采??级 锁

页?锁:开销和加锁时间界于表锁和?锁之间;会出现死锁;锁定粒度界于表锁和?锁之间,并发度?般。

死锁的产生:死锁是指两个或多个事务在同?资源上相互占?,并请求锁定对?占?的资源,从?导致恶性循环

检测死锁:数据库系统实现了各种死锁检测和死锁超时的机制。InnoDB存储引擎能检测到死锁的循环依赖并?即返回?个错误。

死锁恢复:死锁发?以后,只有部分或完全回滚其中?个事务,才能打破死锁,InnoDB?前处理死锁的?法是,将持有最少?级排他锁的事务进?回滚。所以事务型应?程序在设计时必须考虑如何处理死锁,多数情况下只需要重新执?因死锁回滚的事务即可。

 

 

 

Mysql

上一篇:JDBC连接池


下一篇:简单总结把nginx日志通过logstash输入到oracle的方法