SQL结构化查询语言
运维主要关心数据库的架构维护、数据备份、基础数据的管理,但一般不会修改数据表的结构
DQL (开发重点,运维了解)
Data Query Language数据检索语句
从表中获取数据
select databsae();查询当前所在数据库中
Use +库名;#打开/切换数据库
show tables; #数据库里有多少张表
desc user; #表结构(所有)
select * from user; #表的所有字段
select user, host, password from user; #指定字段查询(Linux系统)
DML(开发重点、运维了解)
Data Manipulate Language数据操作语句
insert添加(插入)、update修改、delete删除 表中的行(数据)
插入语句举例
desc tanks;
insert into tanks(id name, skills,price) values(1,'程咬金','大招回血,血量越低,伤害越高', 8888),(2,'大鱼庄周,'免疫所有队友的负面控制',2888);
查看DML语句帮助信息
? Data Manipulation
DCL(运维重点、开发了解)
Data Control Language授权控制语句
grant、revoke、commit、rollback,通过授权用户许可,确定单个用户和用户组对数据库对象的访问
查看DCL语句帮助信息
? Account Management#账户管理语法查看
DCL授权管理
#删除空字段
delete from mysql.user where use=' ';#中间有空格
DCL用户管理实践
用户管理SQL学习
#开发创建一个账号,用于连接数据库,以及查看数据库信息
#创建用户的语法
create user '用户名'@'允许登录的网段' identified by '允许该用户登录的密码';
eg. create user yu@'%' identified by 'yu';#%表示所有主机网段,只要公司防火墙允许,电脑连接网络即可
#创建普通用户时,默认权限为 只允许登录
#查询用户权限
show grants for yu@'%', #查询yu这个用户名默认权限:仅USAGE权限 只能登录
#grant 添加权限
grant 允许执行的权限1,权限2,权限3 on 数据库.数据表 to 用户@主机 identified by '密码';
eg.grant select on mysql.user to yu@'%';
#如果是立即使用,需要在主机上立即刷新权限,才可在客机使用
flush privileges; #刷新授权表,让授权语句立即生效
#给name用户最大权限
grant all privileges on *.* to name@'%' identified by '密码';
DDL(运维、开发都重点)
Data Definition Language
create、drop、alter,在数据库中创建新库或者删除库表,或者为表添加字段、索引等
查看DDL语句帮助信息
man ls #罗列所有
? Data Definition #查看DDL语句的具体指令 ?为英文的问号,注意
? CREATE DATABASE; #查看CREATE DATABASE的具体用法描述;
完整写法举例
drop database if exists lol;
注意点
SQL相关命名规范:
数据库大小写不敏感(不是不区分,只是都可识别)
关键词大小写都可识别,但底层(即内置的SQL关键字)都全大写;
数据库名:不得以数字开头,大小写不敏感;
数据表严格区分大小写
#全写与缩写
#缩写:
create database if not exists kings default charset utf8 collate utf8_general_ci;#utf-8,支持中文且不敏感大小写
create database kings;#若是缩写则有不同
#为什么密码另输入
history会输出之前代码段,可查看密码#Linux系统下适用
缩写时可能出现问题,解决措施:
字符集提前写在配置文件my.cnf中才能被识别为utf-8
列表展示
show create database kings;
show create database kings \G; #对结果以列表展示
新建数据库内容说明
mysql字符集的了解
读写mysql的中文数据,得保证
- 客户端的编码,mysql的连接客户端,如mysql命令,如navicat的编码,如xshell的编码
- 服务端的编码,linux服务器本身的编码,mysqld服务端的编码
- 统一、一致
另一些重要指令
show variables like 'char%'; #展示包含了char字符的变量
show database like 'k%';#展示k开头的所有database
#从kings中查看数据表
show tables from kings;
#创建数据表的语法
#creat table tb_name(字段名 字段数据类型, 字段名2 字段数据类型2);
#eg.
create table if not exists 'tanks'(
id int unsigned auto_increment, #无符号自增
name varchar(100) not null;
primary key(id) #设置id为主键
)engine = innodb default charset = utf8#引擎
引擎:好比汽车有不同种类的发动机,各种发动机有各种优缺点
面试重点
SQL解析原理
分为App层与Mysqld层,Mysqld层又分为Connection layer(主要了解 连接池)、SQL layer(了解 Parser、Query Cache)、Storage engine layer(又可称为存储层)。
连接池:已知创建与销毁过程对资源消耗大,连接池让后续的mysql连接可以反复使用一个连接信息,以减少数据库连接、创建、销毁的资源开销。
Parser:SQL的解析流程中 对用户发来的SQL语句进行了解析。
Query Cache:缓存,加速查找,若缓存上有则不必去磁盘查找,提高了查找效率。
存储层:Disx磁盘、Memory内存、Networkwe网络文件系统(主要应用于远程读写数据)
过程
- 检测SQL的正确性,是否符合DDL、DML、DCL等规则。
- 针对不同的SQL分类,分发给不同的底层模块去执行
- 若为select语句,则先去cache中寻找缓存
- 若无缓存,则执行到Parser
- 准备SQL的执行计划(与底层性能优化有关)
判断sql语句查询的目标字段是否有索引,在底层找最高效的语法得出最有效的执行方式。
- 执行SQL计划,查询数据
- 数据读取到最后,添加数据到缓存中,便于下次加速查找