MySQL 八股

事务

事务是数据库中的基本概念,是指一组操作的集合,而这一组操作要么同时成功,要么同时失败,从而保证数据库中数据的正确性和完整性。事务具有四大特性,也就是我们常说的ACID,分别是:原子性、一致性、隔离性、持久性。

  1. 原子性指的是事务中的这一组操作,是不可分割的最小操作单元了,操作要么全部成功,要么全部失败。
  2. 一致性是指在事务操作的前后,必须使数据处于一致的状态。
  3. 隔离性指的是数据库中提供了隔离机制,保证事务在不受外部并发操作的影响的独立环境中运行。
  4. 持久性就比较简单了,就是事务一旦提交或回滚了,它对数据库的改变就是永久的。

并发事务,那并发事务回引发哪些问题

  1. 脏读:就是一个事务,读取到了另一个事务还没有提交的数据。
  2. 不可重复读:指的是在同一个事务中,先后读取同一条记录,但两次读取的数据不同。
  3. 幻读:指的是一个事务按照条件查询数据时,没有对应的行,但是插入时,又发现这行数据已经存在了好像出现了幻觉。

在数据库系统中都已经解决了。在数据库中提供了不同的隔离级别来解决这些问题, 分别有以下几种:

  1. READ UNCOMMITED :读未提交。 这种隔离级别下,会出现脏读、不可重复读、幻读问题。
  2. READ COMMITED:读已提交。 这种隔离级别,解决了脏读问题,但是会出现不可重复读、幻读问题。
  3. REPEATABLE READ:可重复读。这种隔离级别,解决了脏读、不可重复读问题,但是会出现幻读问题。
  4. SERIALIZABLE:串行化。解决了上述所有的并发事务问题。

在MySQL数据库中,默认的隔离级别是 REPEATABLE READ(可重复读)。

索引

MySQL数据库索引的索引类型有多种,比如像B+tree索引、Hash索引等,但在InnoDB存储引擎中默认使用的是B+tree的索引。

  1. 聚簇索引
  2. 二级索引

MySQL中的 char 和 varchar 都是用于存储字符串的数据类型