MySQL介绍及sql规范
2019-01-14 本文已影响0人
aq_wzj
1. MySQL 版本
主流版本
mysql 5.6 5.6.36 5.38 5.6.40
mysql 5.7 5.7.18 5.7.20 5.7.22
2.MySQL的体系结构
2.1 MySQL C/S结构
两种链接方法: TCP/IP (远程,本地),SOCKET(本地)
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
mysql -uroot -poldboy123 -S /tmp/mysql.sock
2.2 MySQL实例
实例=mysqld+内存结构
MySQL实例===>mysqld(董事长)-->master thread(经理)-->N Thread(员工) -->内存结构(办公区)
2.3 mysqld三层结构
连接层
1.提供连接协议(TCP ,Socket)
2.用户验证
3.提供专用链接线程
SQL层
1.接收上层的命令
2.语法检测
3.语义(SQL类型),权限
SQL类型:DDL数据定义语言 DCL数据控制语言 DML数据操作语言 DQL数据查询
4.专用解析器解析SQL,解析成多种执行计划
5.优化器:帮我们选择一个代价最低的执行计划(cpu,IO,MEM)
6.执行器:按照优化器的选择,执行SQL语句,得出获取数据方法
7.查询缓存:默认是关闭的. 一般会使用redis产品替代 Tair
8.记录日志:二进制日志
存储引擎层
按照SQL层结论,找相应数据,结构化成表的形式
3. MySQL的逻辑结构
库(schema):存储表的地方(库名,属性)
表(Table):二维表
元数据
表名字
表的属性(表的大小,权限,存储引擎,字符集等)
列:列名字,列属性(数据类型,约束,其他定义)
记录:
数据行
4. SQL 语句(SQL92规范)
4.1 SQL 种类
DDL数据定义语言
DCL数据控制语言
DML数据操作语言
DQL数据查询语言
4.2 SQL语句的操作对象: 库与表
4.3 不同分类语句作用
DDL :
库
CREATE DATABASE
DROP DATABASE
ALTER DATABSE
SQL语句规范第一条:
CREATE DATABASE oldboy CHARSET utf8mb4;
1.关键字大写(非必须),字面量小写(必须)
2.库名字,只能是小写,不能有数字开头,不能是预留关键字
3.库名字必须和业务名有关,例如his_user;
4.必须加字符集.
表
CREATE TABLE
DROP TABLE
ALTER TABLE
CREATE TABLE t1 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
sname VARCHAR(20) NOT NULL COMMENT '用户姓名',
gender ENUM('f','m','u') NOT NULL DEFAULT 'u' COMMENT '用户性别',
telnum CHAR(11) NOT NULL UNIQUE COMMENT '手机号',
tmdate DATETIME NOT NULL DEFAULT NOW() COMMENT '录入时间'
)ENGINE INNODB CHARSET utf8mb4;
SQL语句规范第二条:
1.关键字大写(非必须),字面量小写(必须)
2.表名必须小写,不能有数字开头,不能是预留关键字
3.表名字必须和业务名有关
4.必须加存储引擎和字符集
5.适合的数据类型
6.必须要有主键
7.尽量非空选项
8.字段唯一性
9.必须加注释
10.避免使用外键
11.建立合理的索引
DCL:
grant
revoke
lock
DML :
insert
update
delete
SQL语句规范第三条:
1.insert语句按批量插入数据
2.update必须加where条件
3.delete尽量替换为update
4.如果有清空全表需求,不要用delete,推荐使用truncate
DQL :
select
show
SQL语句规范第四条:
1. select语句避免使用 select * from t1; ----> select id,name from t1;
2. select语句尽量加等值的where条件.例如 select * from t1 where id=20;
3. select 语句对于范围查询,
例如 select * from t1 where id>200;
尽量添加limit或者 id>200 and id<300 union all id>300 and id<400
4. select 的where 条件 不要使用 <> like '%name' not in not exist
5. 不要出现3表以上的表连接,避免子查询
6. where条件中不要出现函数操作.