目录
事务的特性是什么?
事务的特性:ACID即原子性,一致性,隔离性,持久性。
并发事务产生的问题及解决方法
1. 脏读,一个事物读到了另外一个事物还没有提交的数据。
2. 不可重复读,一个事务先后读取同一条数据,前后结果不一致。
3. 幻读(已经解决掉不可重复读的问题),一个事务查找一条指令时,没查到结果,但当他插入时插入失败,再次查询时仍没有查询到该数据(第二次查找仍没有数据是因为以保证了不可重复读);
解决办法:对事务进行隔离。
MySQL的隔离级别
未提交读————三个问题都解决不了,安全度太低,开发中一般不用
读已提交————可以解决脏读,其他两个问题无法解决
可重复读————可以解决脏读和不可重复度————MySQL默认的
串行化—————三个问题都可以解决,但是就不能进行多线程操作,安全性最高,但性能太低,开发中一般不使用。
undo log和redo log的区别?
redo log是物理日志,记录的是数据页发生的变化,服务器宕机可用于恢复数据
undo log是逻辑日志,当事务进行回滚时,通过逆操作来恢复原来的数据
redo log用于保证事物的持久性,undo log用于保证事物的一致性和原子性。
事务中的隔离性是如何保证的?
1. 加锁(排他锁),在进行delete,update,insert等操作时,都会使用排他锁。
2. mvcc:多版本并发控制————维护一个数据的多个版本,以保证读写数据没有冲突。
数据库的主从同步如何实现的?
核心是:二进制binlog文件(存储DDL(不包括show)和DML(不包括select))。
1. 主库在提交事务是,将数据的变更放在二进制文件binlog中。
2. 从库读取主库的二进制文件binlog,写入到从库的中继日志Relay Log中。
3. 从库重做中继日志中的文件,将改变反映他自己的数据。
数据库的分库分表?
1. 水平分库:将一个库的数据拆分到多个库中。(每个库中的表可能是相同的,但存储的数值范围有所差异)
2. 水平分表:将一个表的数据拆分到多个表中(可以是在同一个库中)
3. 垂直分库:以表为依据,根据业务将不同的表拆分到不同的库中。(微服务中常用)
4. 垂直分表:以字段为依据,根据字段属性将不同的字段拆分到不同的表中。
拆分规则:1. 将不常用的字段拆分出来。
2. 将一些大的文本内容或者是二进制文件进行拆分。