MySQL
本文目录
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
企业版本选择: 6-12月之间的GA
2.MySQL的体系结构
2.1 MySQL C/S结构
客户端连接到mysql的两种链接方法: TCP/IP (远程,本地),SOCKET(本地)
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;
*COMMENT注释
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条件中不要出现函数操作.