本文目录结构
MySQL与权限相关的表有哪些?(user,db,host,表,列)
MySQL的binLog有几种格式,分别有什么区别?(statement,row和mixed)
MySQL有哪些数据类型?(整型、实型、字符串、枚举、日期)
数据库基础知识
什么是SQL?
结构化查询语言(Structured Query Language),简称SQL,是一种数据库查询语言。
作用:用于存取数据、查询、更新和管理关系数据库系统。
什么是数据库?
DB的全称是data base,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作;
什么是DBMS?
DBMS的全称是Database Management System,即数据库管理系统的意思,是一个软件,用来管理数据库文件的软件,用户可以访问DBMS对数据进行增删改查操作,常见DBMS有: MySQL、oracle、DB2、sqlite、sqlserver等
为什么要使用数据库?
数据保存在内存 | 数据保存在文件 | |
优点 | 存取速度快 | 数据永久保存 |
缺点 | 数据不能永久保存 | 1)速度比内存操作慢,频繁的IO操作。 2)查询数据不方便 |
数据保存在数据库
1)数据永久保存
2)使用SQL语句,查询方便效率高。
3)管理数据方便
数据库的分类
- 关系型数据库: 经过数学理论验证可以保存现实生活中的各种关系数据, 数据库中存储数据以二维表为单位进行存储;
- 非关系型数据库:通常用来解决某些特定的需求如:数据缓存,高并发,高性能。 存储数据的形式有多种,比如:Redis数据库通过键值对的形式存储数据;Neo4j是图数据库;
主流关系型数据库简介
- MySQL: 08年被sun公司收购09年sun被oracle收购,开源免费,到oracle发布了5.0版本(使用了oracle核心技术 性能提高30%),因为Oracle数据库地位受到威胁,计划把mysql闭源,原mysql作者们不干了,原程序员出去单干,发布了MariaDB数据库、名字是因为作者女儿叫Maria ,市场排名第一;
- Oracle:闭源、最贵、性能最高,市场排名第二;
- SQLServer:微软公司的产品,市场排名第三,主要应用在.net(C#)开发的网站中;
- DB2:IBM公司有做网站的完整解决方案(操作系统,we服务器(如tomcat),数据库等)主要应用在银行等国有大型企业中;
- sqlite:轻量级数据库,只有几十k,一般应用在嵌入式和移动设备中。
什么是数据库的三大范式?
第一范式:每个列都不可以再拆分;即每一列都是不可再分的原子数据项
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分;即非主键字段必须依赖主键字段。
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键;即任何非主键列直接依赖主键列,不能是通过其他非主键列传递依赖主键列。
在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。
什么是数据库的五大约束?(主键、默认、唯一、检查、外键)
主键约束--唯一性,非空性
唯一约束--唯一性,可以空,但只能有一个
检查约束--对该列数据的类型、范围进行限制,如非空约束
默认约束--数据的默认值
外键约束--引用主表的列与另外的表建立关系
MySQL与权限相关的表有哪些?(user,db,host,表,列)
MySQL的binLog有几种格式,分别有什么区别?(statement,row和mixed)
MySQL有哪些数据类型?(整型、实型、字符串、枚举、日期)
事务
什么是数据库事务?
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。
例子【转账】:
假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。
事物的四大特性(ACID)?(原子、一致、持久、隔离)
- 原子性指的是事务不可再分的工作单位。
- 一致性指的是事务确保数据库从一个一致状态转变为另一个一致状态。一致状态表示数据库中数据满足完整性约束。
- 隔离性指的是多个事务之间的操作相互独立。
- 持久性指的是事务一旦提交,其结果就是永久性的。
什么是脏读?幻读?不可重复读?
- 脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
- 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
- 幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
什么是事务的隔离级别?MySQL的默认隔离级别是什么?
为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
隔离级别 | 脏读 | 不可重复读 | 幻影读 |
---|---|---|---|
READ-UNCOMMITTED | √ | √ | √ |
READ-COMMITTED | × | √ | √ |
REPEATABLE-READ | × | × | √ |
SERIALIZABLE | × | × | × |
SQL 标准定义的四个隔离级别:
- READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
- READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
- REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
- SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。
这里需要注意的是:Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别。事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容):,但是你要知道的是InnoDB 存储引擎默认使用 **REPEATABLE-READ(可重读)**并不会有任何性能损失。InnoDB 存储引擎在 分布式事务 的情况下一般会用到**SERIALIZABLE(可串行化)**隔离级别。