Mysql--回顾提要
一、写在前
知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了!
二、来辣!
MyISAM表把自增主键最大id记录到文件,重启也不会丢。InnoDB记录到内存,重启数据库和OPTIMIZE操作会丢。
Heap表存在于内存,用于临时高速存储。BLOB和TEXT不允许,只能=<>>=<=;不支持自增,索引不可为NULL。
InnoDB支持的4中隔离级别,及逐级之间的区别。
BLOB和TEXT区别:对BLOB值进行排序和比较大小时区分大小写,对TEXT值不区分。
每个MyISAM表以三个文件存储在磁盘:表定义:“.frm”;数据文件:“.MYD”(MYDATA);索引文件:“.MYI”(MYINDEX)。
MySQL表格类型:MyISAM、Heap、Merge、InnoDB、ISAM。5.5之前默认引擎是MyISAM,5.5开始是InnoDB。InnoDB是.frm;.ibd(索引和数据)
MySQL优化DISTINCT:DISTNCT在所有列上转换为GROUP BY,并与ORDER BY子句结合使用。
单个索引最多使用16列创建。
允许6种触发器,增删改的前、后。before update
强制关机或断电可能会导致数据表损坏。
MyISAM支持表锁;InnoDB支持表锁、行锁,默认行锁。还有一个页面锁,粒度在中间。
MySQL查询缓存弊端:频繁更新的表,一更新就失效,不安逸。8.0版本被删了。
MyISAM和InnoDB区别:InnoDB支持行锁、事务、多版本并发控制(MVVC)、外键、聚集索引;MyISAM支持全文索引,InnoDB部分版本不支持(可使用Sphinx插件)。
通过整库备份+binlog可以恢复半个月前日志,前提有备份和日志。
优化:尽量使用主键查询:聚簇索引上存储了全部数据,相比普通索引,减少了回表的消耗;MySQL5.6之后引入了索引下推优化,适当使用联合索引,减少回表消耗;若频繁查询某一列,考虑利用覆盖索引避免回表;最左原则:联合索引将高频字段放最左边。
数据库三范式:1属性不可再分(每列只有一个值);2每行可以被唯一区分(加主键);3不含其它表已包含了的非主键信息。
limit offset由于扫描过多数据越往后查询越慢。存在有序id时:可配合当前页最后一条id进行查询,where id > #{id} limit #{limit}。
数据量越来越大导致查询慢:分库分表,根据时间拆分,id最好包含时间(如雪花算法),这样既能根据id直接获取,也能按照时间进行查询。
char和varchar区别:char长度固定为声明长度,1~255,存储时用空格填充,检索时删除。
候选键和主键:超键(学号+姓名)(学号)。候选键(学号)。主键(学号)。外键(学号在另一张表做外键)。不含多余属性的超键=候选键。我从候选键中选一个作为主键。
数据增量大调优:允许数据冗余,避免join查询;字段类型和存储引擎合理,适当添加索引;主从读写分离;合理分表,减少单表数据量提高查询速度;添加缓存;不用select *;
锁的优化:读写分离;分段加锁;减少锁持有时间;多线程尽量按顺序获取锁;锁不能过度细化,避免频繁加锁和释放。
索引底层和优化:B+树,在所有叶子节点增加了指向下一个叶子节点的指针,所以InnoDB建议大部分表使用自增主键作为主索引。
索引失效:以%开头的like语句;OR语句前后没有同时使用索引;数据类型隐式转换(varchar不加单引号可能转成int型)
优化MySQL:语句与索引;数据库表结构;系统配置;硬件。
优化数据库:选取合适的字段属性,减少字段宽度,尽量设置成not null,省份、性别设置成ENUM;使用join代替子查询;使用联合(UNION)代替手动创建的临时表;事务处理;锁定表,优化事务处理;适用外键,优化锁定表;建立索引;优化查询语句。
索引是一种特殊文件,InnoDB的索引是表空间的一部分,包含对数据表里所有记录的引用指针。普通索引唯一任务是加快对数据的访问速度,允许重复值;唯一索引保证数据的唯一性,可以null;主键是特殊的唯一索引,不能为null,用PRIMARY KEY创建;联合索引。
防止SQL注入:用#不用$;过滤关键词update、insert、delete、select、*;SQL语句尽量不省略双引号和单引号;数据库表名和字段名命名技巧,防止被猜;开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置;执行 sql 语句时使用 addslashes 进行 sql 语句转换。
数据定义DDL: Create Table,Alter Table,Drop Table, Craete/Drop Index 等;数据操纵DML: Select ,insert,update,delete;数据控制DCL: grant,revoke ;数据查询DQL: select
MVCC:并发版本控制:相当于为每个修改保存一个版本,版本与事务时间戳关联,读操作只读
该事务开始前的数据库快照。它是通过数据库记录中的隐式字段Undo日志、Read Riew操作实现的。好处:并发读写数据库的时候,提高速度;实现读一致性,解决脏读、幻读、不可重复度问题;采用乐观锁或悲观锁操作解决写和写的从冲突。
三、写在后
只是简要知识点概括,看到就能回忆起相关内容为最妙~~直接评论打卡,开整!!!
Mysql--回顾提要的更多相关文章
- mysql 回顾小练习
Student(id,sname,age,sex) 学生表 Course(id,cname,t_id) 课程表 SC(s_id,c_id,score) 成绩表 Teacher(id,Tname) 教师 ...
- MySQL回顾
一. 对数据库的操作 1. 创建一个库 create database 库名 create database 库名 character set 编码 创建带有编码的 查看编码: 2. 删除一个库 dr ...
- MySQL 基础回顾
mysql 回顾 数据库的设计必须满足三范式 1NF: 强调列的原子性,列不可拆分 eg: 一张表(联系人) 有(姓名,性别,电话)三列,但是现实中电话又可分为家庭电话和公司电话,这种表结构设计就不符 ...
- MySQL快速回顾:数据库和表操作
前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...
- Mysql学习笔记(八)由触发器回顾外键约束中的级联选项
近些天都没有写博客.在学习mysql的知识,通过学习和练习,也熟悉了mysql的函数.触发器.视图和存储过程.并且在实际的开发过程中也应用了一小部分.效果还是十分理想的. 今天晚上在学习触发器模仿in ...
- 回顾:Linux环境 Mysql新建用户和数据库并授权
回顾:Linux环境 Mysql新建用户和数据库并授权 一.新建用户 //登录Mysql @>mysql -u root -p @>密码 //创建用户 mysql> insert i ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- MySQL快速回顾:更新和删除操作
前提要述:参考书籍<MySQL必知必会> 6.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE: 更新表中特定的行: 更新表中所有的行. U ...
- 快速回顾MySQL:简单查询操作
利用空闲时间花几分钟回顾一下 7.1 检索数据 为了查询出数据库表中的行(数据),使用SELECE语句. 格式: # 第一种 SELECT * FROM <table_name>; # 第 ...
随机推荐
- 14.api根路由
我们可以通过使用超链接来提高我们APi的内聚力和可发现性 一.为我们的API创建一个根路径 我们的视图有很多个url,但是没有一个入口点,可以使用@api_view创建一个根路径 #views.p ...
- C# 7.0 添加和增强的功能【基础篇】
C# 7.0 版是与 Visual Studio 2017 一起发布. 虽然该版本继承和发展了C# 6.0,但不包含编译器即服务. 一.out 变量 以前我们使用out变量必须在使用前进行声明,C# ...
- 驱动开发:内核LDE64引擎计算汇编长度
本章开始LyShark将介绍如何在内核中实现InlineHook挂钩这门技术,内核挂钩的第一步需要实现一个动态计算汇编指令长度的功能,该功能可以使用LDE64这个反汇编引擎,该引擎小巧简单可以直接在驱 ...
- CodeTON Round 3 (C.差分维护,D.容斥原理)
C. Complementary XOR 题目大意: 给你两个01串ab,问你是否可以通过一下两种操作在不超过n+5次的前提下将两个串都变为0,同时需要输出可以的操作方案 选择一个区间[l,r] 将串 ...
- onps栈使用说明(3)——tcp、udp通讯测试
4. tcp客户端 在协议栈源码工程下,存在一个用vs2015建立的TcpServerForStackTesting工程.其运行在windows平台下,模拟实际应用场景下的tcp服务器.当tcp客户端 ...
- Go语言核心36讲07
在前文中,我解释过代码块的含义.Go语言的代码块是一层套一层的,就像大圆套小圆. 一个代码块可以有若干个子代码块:但对于每个代码块,最多只会有一个直接包含它的代码块(后者可以简称为前者的外层代码块). ...
- 【Java并发004】原理层面:synchronized关键字全解析
一.前言 synchronized关键字在需要原子性.可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是"万能"的.的确,大部分并发控制操作都能使用synchron ...
- CPU TLB原理 [转载好文]
首先,我们知道MMU的作用是把虚拟地址转换成物理地址.虚拟地址和物理地址的映射关系存储在页表中,而现在页表又是分级的.64位系统常见的配置是4级页表,就以4级页表为例说明.分别是PGD.PUD.PMD ...
- x=x+=x-=x-x;
int x=10; x=x+=x-=x-x; // x=x+(x-(x-x)) System.out.println(x); 输出结果20
- SSH(七)新的开始
在完成了ssh框架搭建的基础上,我尝试着去了解更多.新一阶段还是一些简单的增删改查,只是提高自己的熟练度. 这一片我要创建一个登录页面,并查询数据库完成登录. 一.创建实体: 1.1新建职员实体emp ...