建设通属于官方网站,英文版网站建站要求,学网络营销有前途吗,手机网站最简单三个步骤MySQL数据库八股文
第一章 数据库基础
1. 数据库概念
数据库是存储数据的仓库#xff0c;数据库管理系统是操纵和管理数据库的大型软件#xff08;如MySQL#xff0c;InnoDB是其默认的存储引擎#xff09;#xff0c;SQL是操作关系型数据库的编程语言。
2. SQL语法与分…MySQL数据库八股文
第一章 数据库基础
1. 数据库概念
数据库是存储数据的仓库数据库管理系统是操纵和管理数据库的大型软件如MySQLInnoDB是其默认的存储引擎SQL是操作关系型数据库的编程语言。
2. SQL语法与分类
SQL语句可以单行或多行书写以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性空格和缩进的数量不限制。MySQL数据库的SQL语句不区分大小写关键字建议使用大写。注释
单行注释-- 注释内容 或 # 注释内容多行注释/* 注释内容 */
数据定义语言DDL定义数据库、表、字段、数据操作语言DML对数据库中表的数据记录进行增、删、改操作、数据查询语言DQL用来查询数据库中表记录关键字是select、数据控制语言DCL管理数据库用户、控制数据库的访问权限。
第二章 事务
1. 事务介绍
事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求保证了数据的完整性和一致性。MySQL的服务器层不管理事务事务是由存储引擎实现的。InnoDB是MySQL最为广泛的存储引擎。
2. 事务四大特性ACID
原子性事务是不可分割的最小操作单位
一致性事务完成时必须使所有的数据都保持一致状态
隔离性数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。
持久性事务一旦提交或回滚对数据库中的数据的改变就是永久的
3. 并发事务问题
脏读一个事务读到另外一个事务还没有提交的数据
不可重复读一个事务先后读取同一条数据但两次读取的数据不同
幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在了好像出现了幻影
4. 事务隔离级别
Read uncommitted存在脏读、不可重复读、幻读
Read commit不存在脏读存在不可重复读、幻读
Repeatable Read默认不存在脏读、不可重复读存在幻读
Serializable不存在脏读、不可重复读、幻读
从上到下性能越来越低安全性越来越高
第三章 索引
1. 索引介绍
索引是帮助MySQL高效获取数据的数据结构是在存储引擎层实现的。能够提高数据检索效率降低数据库的IO成本。但索引降低了更新表的速度且索引列占用空间。
2. 索引结构
B树是一棵多路平衡查找树B树与B树相比有以下特点所有的数据都出现在叶子结点叶子结点形成一个单向链表非叶子结点仅起到索引数据作用具体的数据都是在叶子结点。MySQL的B树是在原有B树的基础上增加了一个指向相邻链表指针形成了带有顺序指针的B树利于排序。
3. 索引分类
主键索引对于表中主键创建的索引默认自动创建且唯一
唯一索引避免同一个表中某列数据中的值重复
常规索引快速定位特定数据
全文索引查找的是文本中的关键词而不是比较索引值
InnoDB存储引擎又可以分为聚集索引和二级索引
聚集索引将数据存储与索引放到了一块索引结构的叶子结点保存了行数据有且仅有一个
二级索引将索引与数据分开索引结构的叶子结点关联的是对应主键
4. 索引使用
最左前缀法则如果索引了多列即联合索引要遵循最左前缀法最左前缀法则指的是查询从索引的最左列开始并且不跳过索引中的列。如果跳跃某一列则索引将会部分失效后面的字段索引失效。
5. 索引失效情况
索引列运算、字符串不加引号、模糊查询、or连接条件、数据分布影响使用索引比全表更慢则不使用索引
第四章 锁
1. 锁简介
锁是计算机协调多个进程或线程并发访问某一资源的机制如何保证数据并发访问的一致性和有效性是所有数据库都必须要解决的一个问题。锁分为全局锁、表级锁、行级锁
2. 全局锁
对整个数据库加锁加锁后整个实例处于只读状态后续的DDL、DML、DQL都将被阻塞。典型的场景是全库的逻辑备份但一般不在主库上备份否则业务基本停摆。
3. 表级锁
表级锁锁住整张表。锁定粒度大发生锁冲突概率最高并发度最低。分为表锁、元数据锁和意向锁
表锁分为表共享读锁不会阻塞所有客户端的读但会阻塞所有客户端的写和表独占锁不会阻塞本客户端的读写但会阻塞其他客户端的读写。
元数据锁MDL加锁是系统自动控制一些SQL语句自动添加的无需显示使用当表上有活动事务时不可以对元数据进行写入操作保证读写的正确性。
意向锁使得表锁不用检查每行数据是否加锁减少了表锁的检查。分为意向共享锁与共享锁read兼容与排他锁write互斥和意向排他锁与共享锁和排他锁都互斥
4. 行级锁
行级锁每次操作锁住对应的行数据锁定粒度最小发生锁冲突的概率最低并发度最高通常用在InnoDB引擎。分为行锁、间隙锁和临键锁。
行锁锁定单个行记录的锁防止其他事务对此进行update和delete。
间隙锁锁定记录间隙不包含该记录确保索引间隙不变防止其他事务在这个间隙进行insert进而产生幻读。
临键锁行锁和间隙锁的组合同时锁住数据并锁住数据前的间隙
第五章 日志
更新语句涉及到undo log回滚日志、redo log重做日志和binlog归档日志
Undo log是innoDB存储引擎层生成的日志实现了事务中的原子性主要用于事务回滚和MVCC多版本并发控制。
Redo log是innoDB存储引擎层生成的日志实现了事务中的持久性主要用于掉电故障的恢复。
Binlog是Server层生成的日志主要用于数据备份和主从复制。
第六章 其他
范式的目的在于降低数据的冗余性和数据的一致性而不是为了提高查询效率。在select语句中使用关键字distinct可以把重复行屏蔽掉。在MySQL中返回字符串长度的函数是length()sql中查询关键字的书写顺序为select、distinct、from、join、on、where、group、by、having、order by、limit。执行顺序from、on、join、where、group by、having、select、distinct、order by、limit。