一,数据库三大范式
1,第一范式 (原子性)
2,第二范式,消除非主属性对主码的部分依赖,(每一个非主属性都完全依赖于主键)
3,第三范式,消除传递依赖
二,一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
经实践,id=8
三,如何获取当前数据库版本?
四,说一下 ACID 是什么?
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
原子性:事物中,多个操作,不可分割,要么成功,要么失败
一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性 : 多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。隔离级别一般做到read commited
五,char 和 varchar 的区别是什么?
char是一种固定长度类型,适应于手机号,身份证号码等等固定长度,vachar是边长的,适合用在长度可变的属性。
六,mysql 的内连接、左连接、右连接有什么区别?
内连接 (Inner join )显示符合条件的记录,即只显示有效数值
SELECT xs.学号, xs.姓名 ,xscj.xs_kc.成绩 FROM xscj.xsqk xs Inner JOIN xscj.xs_kc ON
xs.学号=xscj.xs_kc.学号 ;
结果只显示了选了课的学生的成绩,没选课的没显示出来
外连接(LEFT(outer)JOIN) 左外连接,用于显示符合条件的数据行以及左边表中不符合条件的数据行。此时右边的数据行会以NULL显示。
SELECT xs.学号, xs.姓名 ,xscj.xs_kc.成绩 FROM xscj.xsqk xs Left JOIN xscj.xs_kc ON
xs.学号=xscj.xs_kc.学号 ;
没选课的学生都显示出来了,没有选课的学生成绩会以NULL显示
右连接(Right (outer) JOIN) 右外连接,用于显示符合条件的数据行以及右边表中不符合条件的数据行。此时左边数据行会以NULL显示。
SELECT xs.学号, xs.姓名 ,xscj.xs_kc.成绩 FROM xscj.xsqk xs right JOIN xscj.xs_kc ON
xs.学号=xscj.xs_kc.学号 ;
所有含有成绩的学生都会显示出来。因为都含有成绩,所以坐表不会有空的。
七,数据库索引是如何实现的
八,数据库事物和乐观锁
事物的隔离级别
类型 | 脏读 | 不可重复读 | 幻读 | ||
未提交读(READ UNCOMMITTED) | 是 | 是 | 是 | ||
| 否 | 是 | 是 | ||
可重复读(REPEATABLE READ) | 否 | 否 | |||
串行化(SERIALIZABLE) | 否 | 否 | 否 |
脏读:读到事物未提交的数据。(万一回滚,数据就是无效的了)
不可重复读:两次读之间有别的事物修改。
幻读:两次读之间有别的事物增删。
为什么出现脏读:因为Select操作没有规矩
为什么出现不可重复读:因为update操作没有规矩
为什么出现幻读:因为insert和delete没有规矩
乐观锁:
update product set count=20 where productid = 2 and count=21
通过版本号
读取数据,记录tempstamp
修改数据
检查和提交数据
九,事物性能太慢
通过乐观锁,tempstamp,通过版本号