目录
mysql服务器处理客户端请求
Mysql数据库常用命令
三种删除方式:
mysql服务器处理客户端请求
首先MySQL是典型的c/s架构,即client/Server架构,不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本<SQL语句>,服务器进程处理后再向客户端进程发送一段文本<处理结果>
客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请求为例来画个图展示一下大致的过程:
从上图中可以看到不同的存储引擎用的都是同一个server层
一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎
跨引擎相关的功能都在server层实现,不同的存储引擎共用一个server层 --> 存储引擎是可插拔式的server层
server层包含 连接器、查询缓存、分析器、优化器、执行器
server层覆盖了mysql的大多数核心服务功能,以及所有的内置函数<如日期、时间、数字和加密等函数>,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
MySQL 整个查询执行过程,即MySQL的工作原理?
1、MySQL服务器接收到来自客户端的数据请求;2、数据库会先查询缓存记录,如果命中缓存,直接返回存储在缓存中的查询结果,如果没有命中,则进行下一步操作;
3、数据库会先由解析器来解析SQL语句的,然后进行预处理,接着用优化器生成最优的执行计划;
4、数据库根据最优的执行计划,调用存储引擎的API接口来执行查询结果,并将结果返回给客户端,同时缓存查询结果;
Mysql数据库常用命令
命令行 | 含义 | 备注 | |
---|---|---|---|
show databases; | 查看数据库 | ||
show tables in 库名; | 查看数据表 | ||
show tables; | 查看数据表 | ||
describe 表名; | 查看数据表结构 | ||
desc 表名; | 查看数据表结构 | ||
create database 库名; | 创建数据库 | DDL数据定义语言 管理数据库对象 | |
create table 表名(字段); | 创建数据表 | ||
drop database 库名; | 删除数据库 | ||
drop table 表名; | 删除数据表 | ||
insert into 表名(字段) values (字段); | 插入数据 | DML数据操纵语言 管理表数据 | |
insert into 表名 values(字段); | 插入数据 | ||
update 表名 set 字段=指定要修改的内容 | 修改数据为指定值 | ||
update 表名 set 字段=指定要修改的内容 where 字段=指定字段; | 指定字段修改内容 | ||
delete from 表名; | 删除指定数据表 | ||
delete from 表名 where 字段=指定字段; | 删除指定数据表的指定字段 | ||
select * from 表名 | 查询指定数据表所有数据 | DQL数据查询语言 | |
select 字段1,字段2... from 表名; | 查询指定数据表指定字段 | ||
select 字段1,字段2... from 表名 where 字段=指定字段; | 查询指定数据表指定字段匹配到指定的字段的数据信息 | ||
select 字段1,字段2... from 表名 limit 指定行(可以指定从第几行显示多少行); | 查询指定数据表指定行的数据 | ||
select * from 表名 \G; | 查询指定表以竖向方式显示数据 | ||
alter table 旧表名 rename 新表名; | 修改指定数据表变更新的数据表名 | DCL数据控制语言 | |
alter table 表名 add 字段(字段结构类型); | 扩展表结构,新增字段 | ||
alter table 表名 change 字段 新字段(字段结构类型); | 修改表结构 | ||
alter table表名 drop 字段; | 删除表结构 | ||
create temporary table table_name 字段; | 创建临时表 | 临时表是临时存在的无法show tables查看,退出数据库再登入即消失 | |
create table 新表名 like 旧表名; insert into new_table_name select * from table_name; | 克隆表结构 克隆表数据 | like方法(适用于数据迁移) | |
create table new_table_name(select * from table_name); | 直接创建新表的时候克隆 | 适用于只备份数据 | |
create user '用户名'@'指定地址' identified by '指定密码'; | 新建用户 | 指定地址可以为localhost 也可以为指定的IP(IP可以指定网段,其中可以填入%表示网段的意思 | |
rename user '用户名'@'指定地址' to '新用户名'@'新指定地址'; | 用户重命名 | ||
drop user '用户名'@'指定地址'; | 删除用户 | ||
set password = password('新密码'); | 修改当前密码 | 如果是此命令指定,那么authentication_string字段就是显示密文 | |
set password for '用户名'@'指定地址' = password('new_password'); | 修改指定用户密码 | ||
skip_grant_tables | 跳过授权表 | 用于忘记密码后插入到服务端的配置文件(/etc/my.cnf) | |
update mysql.user set authentication_string=password ('new_password') where user=user_name; | 修改指定用户密码 | 操作该命令行后需要刷新权限(flush privileges) | |
grant 权限1,权限2... on database_name.table_name 'user_name'@'指定地址' identified by 'password'; | 将某个数据库中的数据表授予指定权限给指定用户 | 该用户只能通过授权获得的密码登入数据库,对指定数据库中的数据表进行指定权限的操作 | |
show grants for 'user_name'@'指定地址'; | 查看用户权限 | ||
revoke 权限1,权限2... on database_name.table_name from 'user_name'@'指定地址'; | 撤销用户权限 | ||
mysql 索引 | |||
create index index_name on table_name(索引列); | 直接创建普通索引 | 普通索引 | |
alter table table_name add index index_name(索引列) | 修改表结构时创建索引 | ||
create table table_name (字段 index index_name(索引列)); | 创建表时创建索引 | ||
create unique index index_name on table table_name(索引列); | 直接创建唯一索引 | 唯一索引 unique | |
alter table table_name add unique index_name (索引列); | 修改表结构创建唯一索引 | ||
reate table table_name (字段,unique index index_name(索引列)); | 创建表时指定唯一索引 | ||
create table table_name (字段,primary key(索引列)); | 创建表时创建主键索引 | 主键索引 primary key | |
alter table table_name add primary key(索引列)); | 修改表时指定主键索引 | ||
create table table_name (字段,index index_name(索引列)) | 创建表时指定组合索引 | 组合索引 (可以单列索引,可以多列索引) | |
create fulltext index index_name on table_name(索引列); | 直接创建全文索引 | 全文索引 fulltext 可作用在char varchar text类型列上 | |
alter table table_name add fulltext index_name(索引列); | 修改表方式创建全文索引 | ||
create table table_name(字段,fulltext index_name(索引列)); | 创建表时指定全文索引 | ||
show index from table_name; | 查看索引 | 查看索引 | |
show keys from table_name; | 查看索引 | ||
drop index index_name on table_name | 直接删除索引 | 删除索引 | |
alter table table_name drop index index_name; | 修改表方式删除索引 | ||
alter table table_name drop primary key; | 删除主键索引 | ||
mysql 事务隔离级别 | |||
select @@global.tx_isolation; | 查看全局事务隔离级别 | ||
show global variables like '%isolation%'; | |||
set global transaction isolation level 隔离级别; | 设置全局事务隔离级别 | ||
select @@session.tx_isolation; | 查看当前会话隔离级别 | ||
show session variables like '%isolation%'; | |||
set session transaction isolation level 隔离级别; | 设置会话事务隔离级别 | ||
begin; | 开启事务 | ||
commit; | 提交事务 | ||
rollback; | 回滚至最原始未结束的事务 | 修改表结构后无法回滚事务 | |
rollback to savepoint S1/S2... | 回滚至事务中的标记点 | ||
savepoint S1 | 在事务中增加标记点 | ||
| 修改是否提交事务 | Mysql数据库默认的是自动提交事务,默认为1;如果没有开启自动提交,当前会话所有操作直到输入rollback或者commit才算结束 | |
show variables like 'autocommit' | 查看Mysql中的AUTOCOMMIT值 | ||
mysql 存储引擎 | |||
show engines; | 查看数据库支持的存储引擎 | ||
show table status from database_name where name='table_name'; | 查看指定数据表的引擎 | ||
alter table 表名 engine=引擎; | 直接修改存储引擎 | ||
default-storage-engine=引擎; | 修改配置文件修改引擎 | 配置文件位置在/etc/my.cnf,修改完配置文件后需要重启MySQL数据库,一般不建议使用 | |
create table table_name(字段1,字段2...)engine=引擎; | 创建表时指定引擎 |
database_name #库名
table_name #表名
new_user_name #新用户名
user_name #用户名
三种删除方式:
delete from table_name;
删除指定数据表,可自增(auto_increment)写入可回滚,可带where条件判断
表结构在,表内容看删除内容
支持删除部分数据 建议用
DML数据操纵语言
想删除部分数据行时候,用delete,并且带上where子句
安全性delete 最好 使用它哦
truncate table table_name;
删除指定数据表,不支持自增写入不可回滚,不可带where条件判断
表结构在,删除数据表内容
想删除表内容保留表,不和事务相关可用
DDL数据定义语言
保留表而删除所有数据的时候用truncate
drop from table_name;
删除指定数据表不可回滚,不可带where条件判断
删除表结构和表内容
想删除表可以用
DDL数据定义语言
不再需要一张表的时候,用drop