MySQL深入学习--介绍
Posted LIFE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL深入学习--介绍相关的知识,希望对你有一定的参考价值。
目录
数据库之mysql
一、MySQL 版本
MySQL目前三大最火的分支仍然是Oracle控制的、MariaDB控制的,以及Percona控制的,三者各有特色。其中,Oracle把控了原生MySQL社区版的发展,Percona紧跟MySQL的功能特性,并做了一些运维的改进和工具,MariaDB更加开放,功能特性也更强一些。
Mysql主流版本
- mysql 5.6 5.6.36 5.38 5.6.40
- mysql 5.7 5.7.18 5.7.20 5.7.22
二、MySQL的体系结构
1.MySQL C/S结构
MySQL两种链接方法
- TCP/IP (远程,本地)
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
- SOCKET(本地)
mysql -uroot -poldboy123 -S /tmp/mysql.sock
当server和client在同一台服务器上的时候,我们可以直接用mysql命令登陆。
当什么参数都没有指定的时候,mysql默认使用socket方式登陆
mysql登陆的时候,指定参数-h,会使用tcp/ip的方式连接,如果没有指定端口的话,默认是使用3306端口
2.MySQL实例
实例=mysqld+内存结构
MySQL实例======> mysqld(董事长)---->master thread(经理)---->N Thread(员工) ------>内存结构(办公区)
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语句,得出获取数据方法
# 注:
# 查询缓存:默认是关闭的. 一般会使用redis或Tair替代
# 记录日志:二进制日志
# 第三层:存储引擎层
1.按照SQL层结论,找相应数据,结构化成表的形式
三、MySQL的逻辑结构
库(schema):存储表的地方(库名,属性)
表(Table):二维表
二维表
表名字
表的属性(表的大小,权限,存储引擎,字符集等)
列:列名字,列属性(数据类型,约束,其他定义)
行(记录):数据行
四.SQL 语句
1 SQL 种类
- DDL:数据定义语言
- DCL:数据控制语言
- DML:数据操作语言
- DQL:数据查询语言
2.不同分类语句作用
DDL
库
CREATE DATABASE
DROP DATABASE
ALTER DATABASE
# 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
# 1. 创建用户
# 用户只能在指定的IP地址上登录
CREATE USER 用户名@IP地址 IDENTIFIED BY ‘密码‘;
# 用户可以在任意IP地址上登录
CREATE USER 用户名@‘%‘ IDENTIFIED BY ‘密码‘;
# 2.给用户授权
# 给用户分派在指定的数据库上的指定的权限
GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP地址
# 例如;GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO [email protected];
# 给user1用户分派在mydb1数据库上的create、alter、drop、insert、update、delete、select权限
# 给用户分派指定数据库上的所有权限
GRANT ALL ON 数据库.* TO 用户名@IP地址;
>
# 3.撤销授权
# 撤消指定用户在指定数据库上的指定权限
REVOKE 权限1, … , 权限n ON 数据库.* FROM 用户名@IP地址;
# 例如;REVOKE CREATE,ALTER,DROP ON mydb1.* FROM [email protected];
# 撤消user1用户在mydb1数据库上的create、alter、drop权限
# 4.查看权限
# 查看指定用户的权限
SHOW GRANTS FOR 用户名@IP地址
# 5.删除用户
DROP USER 用户名@IP地址
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条件中不要出现函数操作.
以上是关于MySQL深入学习--介绍的主要内容,如果未能解决你的问题,请参考以下文章