MySQL常用命令 检索版

tips:按ctrl + F 进行检索

启动、关闭MySQL服务
net start mysql
net stop mysql

用户连接数据库。
mysql -h 主机地址或localhost -u用户名 -p

退出MySQL
exit

显示服务器的数据库:
show databases;

创建数据库
create database 库名;

删除数据库
drop database 库名;

选择数据库
use 库名;

查看现在的数据库中的表
show tables;

创建表
create table 表名(
变量名 变量类型 [约束条件] [default 默认值],
[表级约束条件]
)[engine = 存储引擎名] [default charset = 字符集] [tablespace 表空间名];
约束条件:
not null非空
unique唯一
primary key主键
auto_increment自增
generated always as (表达式) virtual计算列
表级约束条件:
primary key (主键1,主键2…)
[constraint 外键约束名] foreign key(外键变量名1, 外键变量名2…) references 主表名(主键变量名1, 主键变量名2…)
[unique | fulltext | spatial] index | key [索引名] (列名1, 列名2…) [asc | desc] [visible | invisible]

删除表
drop table [if exists] 表名;

显示表的结构
describe 表名;
desc 表名;
show create table 表名;

修改表名
alter table 表名 rename 新表名;

修改变量类型、变量位置
alter table 表名 modify 变量名 变量类型 [first | after 变量名];
alter table 表名 change 变量名 变量名 新变量类型;

修改变量名
alter table 表名 change 变量名 新变量名 新变量类型;

添加变量
alter table 表名 add 变量名 变量类型 [约束条件] [first | after 变量名];

删除变量
alter table 表名 drop 变量名;

修改表的存储引擎
alter table 表名 engine = 存储引擎名;
存储引擎名:MyISAM,InnoDB

删除表的外键约束
alter table 表名 drop foreign key 外键约束名;

查询数据
select [distinct] 列名[as 别名]
from 表名[as 别名] [inner join\left |right outer join 表名 on 表达式]
[where | 表达式(any |some\all\exists\not exists\in (子查询))]
[group by 列名 [with rollup] [having 表达式]]
[order by 列名 [asc | desc]]
[limit n, len]
union [all] 查询;
distinct:结果不重复
with rollup:统计记录数量

插入数据
insert into 表名[(列名)] values (值1…), (值1…)…;
insert into 表名[(列名)] select…;

更新数据
update 表名 set 列名 = 值 [where 表达式];

删除数据
delete from 表名[where 表达式];
truncate table 表名;

普通索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
全文索引
空间索引

创建索引
alter table 表名 add [unique | fulltext | spatial] index | key [索引名] (列名1, 列名2…) [asc | desc] [visible | invisible];
create [unique | fulltext | spatial] index 索引名 on 表名(列名1, 列名2…) [asc | desc] [visible | invisible];

删除索引
alter table 表名drop index 索引名;
drop index 索引名 on 表名;

显示索引
show index from 表名;

创建直方图
analyze table 表名 update histogram on 列名1,列名2… with n buckets;

删除直方图
analyze table 表名 drop histogram on 列名1,列名2…;

设置直方图一次加载行数
set histogram_generation_max_mem_size = n;

创建视图
create [algorithm = {undefined | merge | temptable}];
view 视图名 [(列名1,列名2…)]
as select…
[with [cascaded | local] check option];

显示视图的结构
describe 视图名;
desc 视图名;
show table status like ‘视图名’;
show create view 视图名;
select * from information_schema.view;

修改视图
create or replace [algorithm = {undefined | merge | temptable}]
view 视图名 [(列名1,列名2…)]
as select…
[with [cascaded | local] check option];
alter [algorithm = {undefined | merge | temptable}]
view 视图名 [(列名1,列名2…)]
as select…
[with [cascaded | local] check option];

更新视图
update 视图名 set 列名 = 值 where 表达式;
delete from 视图名 where 表达式;

删除视图
drop view [if exists] 视图名 [restrict | cascade];

创建存储过程
create procedure 过程名 ([[in | out | inout] 变量名])
begin

end;

创建存储函数
create function 函数名 ([in 变量名])
returns 数据类型
return (select…);

更改命令结束符号
delimiter 命令结束符号;

定义变量
declare 变量名 变量类型 [default 初始值];

变量赋值
set 变量名 = 值;
select 列名[as 别名] into 变量名 from 表名;

定义条件
declare 条件名 condition for sqlstate_value = ‘xxxxx’ | mysql_error_code(数字);

定义处理程序
declare handler_type handler for condition_value
begin

end;
handler_type(错误处理方式):continue | exit | undo
condition_value(错误类型):sqlstate sqlstate_value | mysql_error_code | condition_name | sqlwarning | not found | sqlexception
sqlstate_value:包含 5 个字符的字符串错误值;
condition_name:表示 declare 定义的错误条件名称;
sqlwarning:匹配所有以 01 开头的 sqlstate_value 值;
not found:匹配所有以 02 开头的 sqlstate_value 值;
sqlexception:匹配所有没有被 sqlwarning 或 not found 捕获的 sqlstate_value 值;
mysql_error_code:匹配数值类型错误代码。

声明光标
declare 光标名 cursor for select…;

打开、关闭光标
open 光标名;
close 光标名;

使用光标
fetch 光标名 into 变量名;

流程控制语句if语句
if 表达式 then …
elseif 表达式 then …
else …
end if;

流程控制语句case语句
case 变量名
with 值 then …
else …
end case;

case
with 表达式 then …
else …
end case;

流程控制语句loop语句
[循环标签名:]loop

iterate label //continue
leave label //break
end loop [循环标签名];

流程控制语句repeat语句(like do循环)
[循环标签名:] repeat

until 表达式
end repeat [循环标签名];

流程控制语句while语句
[循环标签名:] while表达式 do

end while [循环标签名];

调用存储过程
call 过程名();

查看过程和函数的状态
show {procedure | function} status like ‘过程、函数名’;
show create {procedure | function} 过程、函数名;
select * from information_schema.routines where routine_name = ‘过程、函数名’;

修改过程和函数
alter {procedure | function} 过程、函数名 特征;
特征 指定了存储过程的特性,可能的取值有:
contains sql 表示子程序包含 SQL 语句,但不包含读或写数据的语句。
no sql 表示子程序中不包含 SQL语句。
reads sql data 表示子程序中包含读数据的语句。
modifies sql data 表示子程序中包含写数据的语句。
sql security { definer |invoker } 指明谁有权限来执行。
definer 表示只有定义者自己才能够执行。
invoker 表示调用者可以执行。
comment ‘string’ 表示注释信息。

删除过程和函数
drop {procedure | function} [ if exists ] 过程、函数名;

创建触发器
create 触发器名 {before | after} {insert | update | delete} on 表名 for each row
begin

end;

查看触发器
show triggers;
select * from information_schema.triggers where triggers.name = 触发器名;

删除触发器
drop triggers [if exists] 触发器名;

创建用户
create user 用户名@主机地址 [ identified by ‘password’ ];

修改用户名
rename user 用户名 to 新用户名;

删除用户
drop user 用户名;
delete from mysql.user where host = 主机地址 and user = 用户名;

修改用户密码
update mysql.user set authentication_string = password ("密码“) where host = 主机地址 and user = 用户名;
set password = password (“密码”);
mysqladmin -u 用户名 -h 主机地址 -p password "密码“;

给与用户权限
grant 权限名 [(列名)] on 表名
to user [identified by ‘password’]
[with with_option];
with 关键字后面带有一个或多个 with_option 参数。这个参数有 5 个选项,详细介绍如下:
grant option:被授权的用户可以将这些权限赋予给别的用户;
max_queries_per_hour count:设置每个小时可以允许执行 count 次查询;
max_updates_per_hour count:设置每个小时可以允许执行 count 次更新;
max_connections_per_hour count:设置每小时可以建立 count 个连接;
max_user_connections count:设置单个用户可以同时具有的 count 个连接。

删除用户权限
revoke 权限名 [(列名)] on 表名from 用户名;

查看用户权限
select 权限名 from mysql.user where host = 主机地址 and user = 用户名;
show grants for 用户名@主机地址;

重新加载权限
flush privileges;

用户密码到期更换策略
alter user 用户名@主机地址 password expire interval 时间 | default;

创建角色
create role 角色名;

给与角色权限
grant 权限名 [(列名)] on 表名to 角色名;

赋予用户角色
grant 角色名 to 用户名@主机地址;

删除角色权限
revoke 权限名 [(列名)] on 表名from角色名;

查看角色信息
select * from mysql.defualt_roles;

查看角色和用户关系
select * from musql.role.edges;

数据备份
mysqldump -u 用户名 -p 库名 [表名] > 路径/文件名.sql
–all-datebases备份所有数据库
直接复制整个数据库目录(适用于MySIAM,不适应与InnoDB)C:\ProgramData\MySQL\MySQL Server 8.0\Data

数据恢复
mysql -u 用户名 -p [库名] < 路径/文件名.sql
source 路径/文件名.sql(要在所备份的数据库里);
直接复制到整个数据库目录(适用于MySIAM,不适应与InnoDB)C:\ProgramData\MySQL\MySQL Server 8.0\Data

数据迁移
mysqldump -h 主机地址 -u 用户名 -p 库名 [表名]
| mysql -h 目的主机地址 -u 用户名 -p

导出表数据
select… into outfile ‘路径/文件名’ [options]
[options] 为可选参数选项:
fields terminated by ‘字符串’:设置字符串为字段之间的分隔符,可以为单个或多个字符,默认情况下为制表符‘\t’。
fields [optionally] enclosed by ‘字符’:设置字符来括上 char、varchar 和 text 等字符型字段。如果使用了 optionally 则只能用来括上 char 和 varchar 等字符型字段。
fields escaped by ‘字符’:设置如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值为‘\’。
lines starting by ‘字符串’:设置每行开头的字符,可以为单个或多个字符,默认情况下不使用任何字符。
lines terminated by ‘字符串’:设置每行结尾的字符,可以为单个或多个字符,默认值为‘\n’ 。
注意:fields 和 lines 两个子句都是自选的,但是如果两个都被指定了,fields 必须位于 lines的前面。

导出表数据路径设置
C:\ProgramData\MySQL\MySQL Server 8.0\ my.ini
找到
#Secure File Priv.
secure-file-priv=“C:/ProgramData/MySQL/MySQL Server 8.0/Uploads”
改为
secure-file-priv=“存储路径”
保存后net stop mysql; net start mysql;

mysqldump 导出文本文件(导出为表名.sql 和表名.txt)
mysqldump -u 用户名 -p -T 目标目录 库名 [表名] [ options ]
[options] 为可选参数选项:
–fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是“\t”;
–fields-enclosed-by=字符:设置字符来括上字段的值;
–fields-optionally-enclosed-by=字符:设置字符括上char、varchar、text等字符型字段;
–fields-escaped-by=字符:设置转义字符;
–lines-terminated-by=字符串:设置每行的结束符;

mysql导出文本文件
mysql -u 用户名 -p -e “SELECT 语句” 库名 > 路径/文件名
-vertical将每条记录分为多行显示
–xml导出xml文件
–html导出html文件

导入文本文件
load data infile ‘路径/文件名’ into table 表名 [options] [ignore number n lines] [列名];
[options] 为可选参数选项:
fields terminated by ‘字符串’:设置字符串为字段之间的分隔符,可以为单个或多个字符,默认情况下为制表符‘\t’。
fields [optionally] enclosed by ‘字符’:设置字符来括上 char、varchar 和 text 等字符型字段。如果使用了 optionally 则只能用来括上 char 和 varchar 等字符型字段。
fields escaped by ‘字符’:设置如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值为‘\’。
lines starting by ‘字符串’:设置每行开头的字符,可以为单个或多个字符,默认情况下不使用任何字符。
lines terminated by ‘字符串’:设置每行结尾的字符,可以为单个或多个字符,默认值为‘\n’ 。
ignore number lines忽略文件开始处的n行
mysqlimport -u 用户名 -p 库名 目标目录 [ options ]
[options] 为可选参数选项:
–fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是“\t”;
–fields-enclosed-by=字符:设置字符来括上字段的值;
–fields-optionally-enclosed-by=字符:设置字符括上char、varchar、text等字符型字段;
–fields-escaped-by=字符:设置转义字符;
–ignore-lines n忽略文件开始处的n行

设置日志存储路径
C:\ProgramData\MySQL\MySQL Server 8.0\ my.ini
找到
[mysqld]
log-bin=路径/[文件名] //二进制日志
expire_logs_days=n //清除时间间隔
max_binlog_size=n //文件大小
log-error=路径/[文件名] //错误日志
log=路径/[文件名] //通用日志
log-slow-queries=路径/[文件名] //慢查询日志
long_query_time=n //最大超时
保存后net stop mysql; net start mysql;

查看日志
mysqlbinlog 路径/文件名.n
直接打开错误、通用、慢查询日志文件

使用二进制日志还原数据库
mysqlbinlog [options] 路径/文件名.n | mysql -u 用户名 -p
[options] 为可选参数选项:
–start-date=”yyyy-MM-dd hh:mm:ss”
–stop-date=”yyyy-MM-dd hh:mm:ss”
–start-position
–stop-position

显示日志设置
show binary logs;
show variables like ‘log_%’ | ‘%general%’

删除二进制日志
reset master
purge {master | binary} logs to ‘filename.number’;
purge {master | binary} logs to ‘yyyy-mm-dd hh:mm:ss’;

删除错误、通用、慢查询日志
mysqladmin -u 用户名 -p flush-logs
flush logs

停止、开启日志
set sql_log_bin=0/1;
set @@global.general_log=0/1

分析查询语句
explain select…
describe select…
desc select…

禁用、开启索引
alter table 表名 {disable | enable} key;

禁用、开启唯一性检查
set unique_checks = 0/1;

禁用、开启自动提交
set autocommit = 0/1;

分析表
analyze [local | no_write_to_binlog] table 表名

检查表
check table 表名 [options]
[options] 为可选参数选项(只对MyISAM有效):
quick、fast、changed、medium和extended。这5个参数的执行效率依次降低

优化表
optimize [local | no_write_to_binlog] table 表名

设置服务器语句超时的限制
set global max_execution_time = n(毫秒);

创建全局通用表空间
create tablespace 表空间名;

表指定表空间
alter table 表名 tablespace 表空间名;

删除表空间
drop tablespace [if exists] 表空间名;

创建资源组
create resource group 资源组名type = {user | system} vcpu = 逻辑CPU编号
thread_priority = {0…19 | -20…0}

将线程指派到资源组
set resource group 资源组名for 线程id

修改资源组绑定的逻辑CPU编号
alter resource group 资源组名 vcpu = 逻辑CPU编号;

修改资源组优先级
alter resource group 资源组名thread_priority = 优先级;

查看资源组包含的线程
select * from Performance_Schema.threads where resource_group = “资源组名”;

删除资源组
drop resource group [if exists] 资源组名;

设置全局变量
set global 变量名 = 值;

设置持久化全局变量
set persist 变量名 = 值;

查看线程
show processlist;
show full processlist;

查询线程id
select thread_id from performance_schema.threads

查看数据库默认字符集
show variables like ‘character_set_database’;

查看MySQL本次启动后的运行时间(单位:秒)
show status like ‘uptime’;

查看select语句的执行数

show [global] status like ‘com_select’;

查看insert语句的执行数
show [global] status like ‘com_insert’;

查看update语句的执行数
show [global] status like ‘com_update’;

查看delete语句的执行数
show [global] status like ‘com_delete’;

查看试图连接到MySQL(不管是否连接成功)的连接数
show status like ‘connections’;

查看线程缓存内的线程的数量。
show status like ‘threads_cached’;

查看当前打开的连接的数量。
show status like ‘threads_connected’;

查看当前打开的连接的数量。
show status like ‘threads_connected’;

查看创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。
show status like ‘threads_created’;

查看激活的(非睡眠状态)线程数。
show status like ‘threads_running’;

查看立即获得的表的锁的次数。
show status like ‘table_locks_immediate’;

查看不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。
show status like ‘table_locks_waited’;

查看创建时间超过slow_launch_time秒的线程数。
show status like ‘slow_launch_threads’;

查看查询时间超过long_query_time秒的查询的个数。
show status like ‘slow_queries’;

参考:http://c.biancheng.net/mysql/
MySQL8入门到精通(视频教学版)王英英 著

猜你喜欢

转载自blog.csdn.net/ymxyld/article/details/120924142