SQL结构化查询语言分类、注意点及面试重点

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; #对结果以列表展示

对于\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网络文件系统(主要应用于远程读写数据)

过程

  1. 检测SQL的正确性,是否符合DDL、DML、DCL等规则。
  2. 针对不同的SQL分类,分发给不同的底层模块去执行
  3. 若为select语句,则先去cache中寻找缓存
  4. 若无缓存,则执行到Parser
  5. 准备SQL的执行计划(与底层性能优化有关)

判断sql语句查询的目标字段是否有索引,在底层找最高效的语法得出最有效的执行方式。

  1. 执行SQL计划,查询数据
  2. 数据读取到最后,添加数据到缓存中,便于下次加速查找
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值