携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
1. 事务的隔离级别
-
读未提交(Read uncommitted):
- 一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证。
-
读已提交(Read committed):
- 一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生。
-
可重复读(Repeatable read):
- 就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生。
-
串行(Serializable):
- 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
-
Mysql的默认隔离级别是Repeatable read。
2. Mysql中的myisam与innodb的区别
- InooDB支持事务,而MyISAM不支持事务
- InnoDB支持行级锁,而MyISAM支持表级锁
- InnoDB支持MVCC,而MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB不支持全文索引,而MyISAM支持
3. 开启显式事务
-
set autocommit=0;
-
start transaction;#可以省略
4. 并发事务
-
事务的并发问题是如何发生的?
- 多个事务 同时 操作 同一个数据库的相同数据时
-
并发问题都有哪些?
- 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
- 不可重复读:一个事务多次读取,结果不一样
- 幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据
-
如何解决并发问题
- 通过设置隔离级别来解决并发问题
-
隔离级别
- read uncommitted:读未提交
- read committed:读已提交 【脏读】
- repeatable read:可重复读 【脏读】【不可重复读】
- serializable:串行化 【脏读】【不可重复读】【幻读】
5. Mysql中有哪几种锁?
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
- 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
6. NOW()和CURRENT_DATE()有什么区别?
- NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。
- CURRENT_DATE()仅显示当前年份,月份和日期。