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 bytesA fixed-length field from 0 to 255 characters long
VARCHAR[Length]String length+1 or 2 bytesA variable-length field from 0 to 65,535 characters long
TINYTEXTString legnth + 1 bytesA string with a maximum length of 255 characters
TEXTString length + 2 bytesA string with a maximum length of 65,535 characters

九、Mysql常用数据类型-数值

字段类型长度说明说明
TINYINT[Length]1 byteRange of -128 to 127 or 0 to 255 unsigned
SMALLINT[Length]2 bytesRange -32,768 to 32,767 of 0 to 65,535 unsigned
MEDIUMINT[Length]3 bytesRange-8,388,608 to 8,388,607 or 0 to 16,777,215 unsigned
INT[Length]4 bytesRange of -2,147,483,648 to 2,147,483,647 or 0 to 4,294,967,295
BIGINT[Length]8 bytesRange 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 bytesA small number with a floating decimal point
DOUBLE[Length, Decimals]8 bytesA larg number with a floating decimal point

十、Mysql常用数据类型-日期和时间

字段类型长度说明说明
DATE3 bytesIn the format of YYYY-MM-DD
DATETIME8 bytesIn the format of YYYY-MM-DD HH:MM:SS
TIMESTAMP4 bytesIn 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基础常考题的主要内容,如果未能解决你的问题,请参考以下文章

Python语言基础常考题

3-1 Python语言基础常考题

4-6 Python数据结构常考题之二叉树

7-2 HTTP 面试常考题

7-2 HTTP 面试常考题

8-3 SQL语句编写常考题