字符集、权限
修改整mysql的字符集
linux 下:
vim /etc/my.cnf
在最后加上中文字符集配置
character_set_server=utf8
重启mysql服务即可
修改成功创建的数据库或表的字符集
对于已经创建好的数据库或数据表进行修改字符集
-
修改数据库的字符集
alter database mydb character set 'utf8';
-
修改数据表的字符集
alter table mytbl convert to character set 'utf8';
创建用户及后续权限修改
创建用户
create user zhang3 identified by '123456'
表示创建名称为zhang3,密码设置为123546;
select host,user,authentication_string from user;
查看用户表,其中host字段下的localhost
代表仅可在本机进行登陆,%
代表可进行远程登陆。
修改用户密码
updata mysql.user set password('123456') where user = 'li4';
flush pivileges;
-- 所有MySQL系统表的修改,必须使用此命令刷新权限后才能生效
修改权限
grant 权限1,权限2,。。。 on 数据库.表名称 to 用户名@用户地址 indentified by '连接口令';
例:
grand select,insert,delete,drop on atguigudb.* to li4@localhost;
-- 给li4用户本地命令行下,授权atguigudb这个库下所有表的增删改查的权限。
grand all privileges on *.* to root@'%' identified by '123456';
-- 授予通过网络方式登陆的root用户,对所有表的所有权限,密码设置为123456.
刷新MySQL的系统权限相关表
flush pivileges;
使用场景:当我们直接使用DML语句修改系统权限表(mysql.user、mysql.db、mysql.tables_priv、mysql.columns_priv)时,内存中的权限数组是不会同步更新的,此时就需要使用flush privileges
来更新内存权限数据。
一些杂项配置
-
group by 使用原则:select 后面只能放函数和group by 后的字段
select name,dept,Max(age) from mytbl2 group by dept limit 0 ,100
- mysql5.5会正常显示分组中最大年龄的字段,但name字段是第一条数据的。
- mysql5.7 会报错,错误代码1055,sql_mode = only_full_group_by
MySQL的逻辑架构
由客户端发送链接数据库的请求,到达Mysql服务端中,先访问连接池(connection pool);第二步,访问缓存(读)和缓冲(写)(caches&Buffers),如果访问的数据在缓存中,则直接返回访问结果;如果没有,那么将访问接口、之后进入解析器、优化器(在不改变查询结果的前提下,调整sql语句的顺序,生成执行计划)对复杂sql进行解析和优化;最后到达存储引擎完成具体的查询工作,得到结果后返回给客户端的同时,会向缓存中存储一份。
sql语句的执行顺序
优化器的作用:在不改变查询结果的前提下,调整sql的执行顺序。
-- mysql的标准语法
select Distinct(去重)
< select_list >
from
<left_table > <join_type>
join <right_table> on <join_condition>
where
< where_condition >
group by
<group_by_list>
Having
<having_congdition>
order by
< order_by_condition >
limit <limit_number >
MySQL的存储引擎
查看mysql的存储引擎show engines;
MyISAM 和 InnoDB
对比项 | MyISANM | InnoDB |
---|---|---|
外键 | × | √ |
事务 | × | √ |
行表锁 | 表锁,即使操作一条记录也会锁住整个表 不适合高并发的操作 | 行锁,操作时只锁某一行,不对其他行产生影响。但行锁会出现死锁情况。 适合高并发的操作 |
缓存 | 只缓存索引,不缓存真是数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能由决定性的影响。 |
关注点 | 节省资源、消耗少、简单业务 | 并发写、事务、更大资源 |
mysql系统自带的系统表(不会出现高并发、节省资源)使用MyISAM。