8-1 Mysql基础常考题
Posted WinvenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8-1 Mysql基础常考题相关的知识,希望对你有一定的参考价值。
一、考点聚焦
mysql
基础考点
1.事务的原理、特性、事务并发控制
2.常用的字段、含义和区别
3.常用数据库引擎之间区别
二、什么是事务?
Transaction
1.事务是数据库并发控制的基本单位
2.事务可以看作是一系列SQL
语句的集合
3.事务必须要么全部执行成功,要么全部执行失败(回滚)
转帐操作是事务使用的一个常见场景
代码示例:
session.begin()
try:
item1 = session.query(Item).get(1)
item2 = session.query(Item).get(2)
item1.foo = 'bar'
item2.bar = 'foo'
session.commit()
except:
session.rollback()
raise
三、事务的ACID
特性
ACID
是事务的四个基本特性,牢记四个特性以及它们的含义
1.原子性(Atomicity
):一个事务中所有操作全部完成或失败
2.一致性(Consistency
):事务开始和结束之后数据完整性没有被破坏
3.隔离性(Isolation
):允许多个事务同时对数据库修改和读写
4.持久性(Durability
):事务结束之后,修改是永久的不会丢失
四、事务的并发控制可能产生哪些问题
如果不对事务进行并发控制,可能会产生四种异常情况
1.幻读(phantom read
):一个事务第二次查出现第一次没有的结果
2.非重复读(norepeatable read
):一个事务重复读两次得到不同的结果
3.脏读(dirty read
):一个事务读取到另一个事务没有提交的修改
4.丢失修改(lost update
):并发写入造成一些修改丢失
五、四种事务隔离级别
为了解决并发控制异常,定义了4
种事务隔离级别
1.读未提交(read uncommitted
):别的事务可以读取到未提交改变
2.读已提交(read committed
):只能读取已经提交的数据
3.可重复读(repeatable read
):同一个事务先后查询结果一样。Mysql InnoDB
默认实现可重复读级别
4.串行化(Serializable
):事务完全串行化的执行,隔离级别最高,执行效率最低
六、如何解决高并发场景下的插入重复
高并发场景下,写入数据库会有数据重复问题
1.使用数据库中唯一索引
2.使用队列异步写入
3.使用redis
等实现分布式锁
七、乐观锁和悲观锁
什么是乐观锁,什么是悲观锁
1.悲观锁是先获取锁再进行操作。一锁二查三更新 select for update
2.乐观锁先修改,更新的时候发现数据已经变了就回滚(check and set
)。乐观锁一般通过版本号或者时间戳实现。
3.使用时需要根据响应速度、冲突频率、重试代价来判断使用哪一种
八、Mysql
常用数据类型-字符串(文本)
字段类型 | 长度说明 | 说明 |
---|---|---|
CHAR[Length] | Length bytes | A fixed-length field from 0 to 255 characters long |
VARCHAR[Length] | String length+1 or 2 bytes | A variable-length field from 0 to 65,535 characters long |
TINYTEXT | String legnth + 1 bytes | A string with a maximum length of 255 characters |
TEXT | String length + 2 bytes | A string with a maximum length of 65,535 characters |
九、Mysql
常用数据类型-数值
字段类型 | 长度说明 | 说明 |
---|---|---|
TINYINT[Length] | 1 byte | Range of -128 to 127 or 0 to 255 unsigned |
SMALLINT[Length] | 2 bytes | Range -32,768 to 32,767 of 0 to 65,535 unsigned |
MEDIUMINT[Length] | 3 bytes | Range-8,388,608 to 8,388,607 or 0 to 16,777,215 unsigned |
INT[Length] | 4 bytes | Range of -2,147,483,648 to 2,147,483,647 or 0 to 4,294,967,295 |
BIGINT[Length] | 8 bytes | Range of-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 or 0 to 18,446,744,073,709,551,615 unsigned |
FLOAT[Length, Decimals] | 4 bytes | A small number with a floating decimal point |
DOUBLE[Length, Decimals] | 8 bytes | A larg number with a floating decimal point |
十、Mysql
常用数据类型-日期和时间
字段类型 | 长度说明 | 说明 |
---|---|---|
DATE | 3 bytes | In the format of YYYY-MM-DD |
DATETIME | 8 bytes | In the format of YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4 bytes | In the format of YYYYMMDDHHMMSS ; acceptable range starts in 1970 and ends in the year 2038 |
十一、InneDB
vs
MyISAM
两种引擎常见的区别
1.MyISAM
不支持事务,InnoDB
支持事务
2.MyISAM
不支持外键,InnoDB
支持外键
3.MyISAM
只支持表锁,InnoDB
支持行锁和表锁
4.MyISAM
支持全文索引,InnoDB 1.2.x
开始才支持全文索引,而MySQL5.6
版本中innodb
的版本才升级到1.2.x
,所以,mysql5.5
版本的innodb
不支持全文索引。
以上是关于8-1 Mysql基础常考题的主要内容,如果未能解决你的问题,请参考以下文章