修改以前数据库的字符集
修改以前数据表的字符集
创建用户
授权命令
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
收回权限
设置可以外部连接
查看修改是否成功
在命令行关闭防火墙
Mysql严格模式
在严格模式下不允许查询分组以外的字段,因为性能差
select * from user group by age;
查看严格模式
演示案例,创建表
CREATE TABLE mytbl2(id INT,NAME VARCHAR(16),age INT,dept INT);
INSERT INTO mytbl2 VALUES(1,'zhang3',33,101);
INSERT INTO mytbl2 VALUES(2,'li4',34,101);
INSERT INTO mytbl2 VALUES(3,'wang5',34,102);
INSERT INTO mytbl2 VALUES(4,'zhao6',34,102);
INSERT INTO mytbl2 VALUES(5,'tian7',36,102);
\#查询每个部门年龄最大的人
从新设置严格模式
以上2种重启mysql会恢复,修改配置文件
在/etc/my.cnf中配置sql_mode,永久生效,下面代码复制到配置文件最后,去掉自己不需要的模式
然后重启
Mysql层次结构
sql语句进来之后,先进入连接层进入验证校验,进入sql接口接受语句,先看缓存有没有数据是key value值,有就直接返回,没有进入解析器,优化器,走存储引擎进入数据库查询
连接层:认证,连接池
服务层:权限管理,接受sql返回结果,
解析器:
优化器:对sql进行优化
查询缓存默认关闭,开启查询缓存
开启查询执行计划
引擎层:存储引擎
存储层:文件系统存储数据,以二进制方式存
运行流程
首先,mysql客户端通过协议与mysql服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,也就是说,在解析查询之前,服务器会先访问查询缓存(query cache)——它存储SELECT语句以及相应的查询结果集。
如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅仅将缓存中的结果返回给用户即可,这将大大提高系统的性能。
语法解析器和预处理:首先mysql通过关键字将SQL语句进行解析,并生成一颗对应的“解析树”。
mysql解析器将使用mysql语法规则验证和解析查询;
预处理器则根据一些mysql规则进一步检查解析树是否合法。
查询优化器当解析树被认为是合法的了,并且由优化器将其转化成执行计划。
一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。
然后,mysql默认使用的B+TREE索引,并且一个大致方向是:无论怎么折腾sql,至少在目前来说,mysql最多只用到表中的一个索引。
算法与时间复杂度
性结构包括:数组、链表、队列和栈
非线性结构包括:二维数组,多维数组,树结构,图结构
索引方式
(1)哈希,例如HashMap,查询/插入/修改/删除的平均时间复杂度都是O(1);但是不能排序,InnoDB并不支持哈希索引
(2)树,例如平衡二叉搜索树,查询/插入/修改/删除的平均时间复杂度都是O(log2N);
在做算法分析时,主要讨论的是时间复杂度。从用户使用体验上看,更看重的程序执行的速度。一些缓存产品(redis, memcache)和算法(基数排序)本质就是用空间换时间,redis数据放在内存中,减少磁盘与内存之间io流
Mysql简介
关系型数据库、开源、索引底层B+树、GPL协议、支持多种语言连接
初始化时:一部分索引会放在内存中(根节点),大部分会放在磁盘上
BTree和B+Tree比较
首先,B+树的查找和B树一样,起始于根节点,自顶向下遍历树。
不同的是,B+树中间节点不存储数据,只有键值和指针,而B树每个结点要存储键值和实际数据,这就意味着同样的大小的磁盘块B+树可以容纳更多节点元素,在相同的数据量下,B+树更加“矮胖”,IO操作更少 。
存储引擎
o **MySQL5.5**之后,默认采用InnoDB引擎。
o InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
o 除了增加和查询外,还需要更新,删除操作,那么,应优选选择InnoDB存储引擎。
o 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
**MyISAM存储引擎**
o MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
o 5.5之前默认的存储引擎
索引
索引(Index)是帮助MySQL**高效获取数据的数据结构。
有索引时添加、删除、修改慢:没有索引直接操作就行,有索引时需要创建
聚簇索引与非聚簇索引
聚簇索引是一种数据存储方式,数据行和相邻的键值聚簇的存储在一起
好处: 按照聚簇索引排列顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多个数据块中提取数据,所以节省了大量的io操作。
由于数据物理存储排序方式只能有一种,所以每个MySQL的表只能有一个聚簇索引。一般情况下就是该表的主键
单值索引
即一个索引只包含单个列,一个表可以有多个单列索引,性能接近聚簇索引
创建方式
唯一索引
主键索引
复合索引
一个索引包含多个列