mysql的基础知识--面试点常问

MySQL这款数据库因为是开源免费的所以在国内大部分的项目组采用的都是MySQL这款数据库。面试中也是经常问到MySQL的一些常见问题
知道的回炉一下,不知道的正好学习一些;

1、数据库的设计三范式

第一范式:每个表都应该有主键,并且每个字段要求原子性不可再分
第二范式:建立在第一范式基础之上。所有非主键字段必须完全依赖于主键不能产生部分依赖。
第三范式:建立在第二范式基础之上,所有非主键字段必须直接依赖于主键不能产生传递依赖
作用 : 遵守数据库设计三范式的要求来设计表结构,能够减少数据的冗余,但是实际项目开发中中,我们以满足客户的需求为主,有时也会拿冗余来换取速度。

二、事务的隔离级别

读未提交(read uncommitted):
这种隔离级别最低,一般都是只停留在理论上,实际的数据库一般都是至少二挡起步。
这种隔离级别存在的问题是:脏读现象(dirty read)
对方事务没有提交的数据,我方事务可以读取到,称之为读到了脏数据。
读已提交(read committed):
这种隔离级别是多数数据库的默认隔离级别,比较具有代表的就是oracle。
这种隔离级别表示对方事务提交之后,我方事务才可以读取到数据。
这种隔离级别解决了脏读现象,那么它存在什么问题呢?
这种隔离级别存在“不可重复读”现象。(不可重复读表示:在当前事务还未结束的时候,第一次读到的数据和第二次读到的数据不一样。)
这种隔离级别每一次读取到的数据都是真实的,因为都是对方提交之后的数据,
真实的每一次读取的是硬盘文件中的数据。
可重复读(repeatable read):
			对方事务提交之后的数据,我方还是读不到。
			采用这种隔离级别可以保证:只要当前事务没结束,读到的数据永远都是一样的。第一次读取和第二次读取的结果完全相同。
			这种隔离级别解决了“不可重复读”问题,那么它存在什么问题呢?
				存在幻象读问题,读到数据不是真实的,是幻象。
序列化读/串行化读(serializable)
			事务A与事务B不能并发,只能排队。这种隔离级别最高,效率最低。数据最安全。
		解决了所有的问题。

oracle默认的隔离级别是二挡起步:读已提交(read committed)
mysql默认的事务隔离级别是三挡起步:可重复读(repeatable read)

三、事务的特性ACID

原子性(A)  、 一致性(C) 、 隔离性(I) 、 持久性(D)

1、原子性表示事务是最小的执行工作单元不可再分。
2、一致性表示事务必须同时成功或者同时失败。
3、隔离性表示事务之间的隔离,及两事务之间互不干扰。
4、持久性是事务最终结束的保障。

四、存储引擎

存储引擎是MySQL提出的概念,其它数据库都没有这个说法,但是有类似的机制,Oracle没有特殊的称谓,一般叫做 “ 表的存储方式”。
MySQL给一张表指定存储引擎是在create建表语句的时候使用,“Engine = 存储引擎的名字”来给表指定。默认是InnoDB.

//查看MySQL支持哪些存储引擎:
mysql> show engines \G

猜你喜欢

转载自blog.csdn.net/qq_42963930/article/details/102998300