数据库MySQL 01-MySQL基础
MySQL为关系型数据库。
一 存储引擎
1. innoDB 和MyISAM的区别
- innoDB支持行级锁和表级锁,MyISAM只支持表级锁
- innoDB支持事务,MyISAM不支持事务
- innoDB支持外键,MyISAM不支持
- innoDB支持MVCC,MyISAM不支持
1)表级锁和行级锁如何使用?
- InnoDB: 隐式加锁,显式加锁
- 行级锁:共享锁和排它锁
2)数据库的事务如何使用?
3)外键是什么?有什么用?怎么用?
- 外键约束(FOREIGN KEY):是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
- 用处:定义两张表之间的关系
- 怎么用:foreign key(repo_id) references repo_table(repo_id))
4)MVCC是什么?有什么用?怎么用?
- MVCC:Multi-Version Concurrency Control 关键词:读写冲突
- 作用:是一种用来解决读-写冲突的无锁并发控制。
- 怎么用:1.MVCC+悲观锁 2. MVCC+乐观锁
- 原理:在 InnoDB 中,在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号。通过版本号和行锁,从而提高数据库系统并发性能。
二、 索引
Java索引
1. B+ Tree 和 哈希索引
三、事务
1.特性
ACID
- 原子性
- 一致性
- 隔离性
- 持久性
2.并发带来的问题
3.MySQL事务的隔离机制
- 读未提交: 读到未提交的数据
- 读已提交:
- 可重复读:
- 序列化读
问题:
- 脏读:读到未提交的数据
- 不可重复读:多次读取得到的数据不一致
- 幻读: 事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。
脏读:考试看到其他人的答案
不可重复读:开始做题,看别人答案是1,做到一半看别人答案是2
幻读:考试开始时,考场少一个人,结束后看到有两个