写在前面的话:
本系列文章旨在,梳理mysql 常用的指令,不采用常规的 sql 语言(ddl,dml..)分类顺序进行,
而是采用由大到小,由上层应用到底层实现的方式进行梳理:
用户>>库>>表>>视图>>函数>>存储过程>>索引>>存储引擎
希望通过该过程,在查缺补漏的同时,对mysql 能有更系统的认识
语法规范:
- 常用的关键字需要大写,库名、表名、字段名称等使用小写
- SQL语句支持折行操作,拆分的时候不能把完整单词拆开
- 数据库名称、表名称、字段名称不要使用MySQL的保留字,如果必须要使用,需要用反引号``将其括起来
- 命令行结束符默认使用;或\g来结束
常规操作
net start mysql --启动mysql服务
--默认登录
mysql -uroot -p --登录
mysql -uroot -p <password>--登录明文密码登录
--远程登录
mysql -h <host> -p <password> -D <bd_name> -u<user> --远程登录同时切换指定数据库
--退出mysql命令行
exit;
quit;
\q
--查看帮助手册
help
\h
?+相关关键字
--获取mysql版本号
--登录前
mysql -V
mysql --version
--登陆后
SELECT VERSION();
STATUS;
用户相关操作
SELECT USER();--获得登录用户
--创建用户(一)
CREATE USER '<username>'@'<host>' IDENTIFIED BY [PASSWORD] '<password>';
--username:将创建的用户名
--host:主机名,用于指定用户可以在哪个主机上登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%,若该参数为空则默认为%
--password:该用户的登陆密码,密码可以为空(为空时可省略 IDENTIFIED BY)
--[PASSWORD] 可选参数,一般为安全考虑可通过 PASSWORD 关键字使用密码的哈希值设置密码:
--1.执行:
SELECT password('<password>');
--2.得到输入参数<password> 的哈希值<hash_pass>,然后执行:
CREATE USER '<username>'@'<host>' IDENTIFIED BY PASSWORD '<hash_pass>';
--创建用户(二)
--1.向user表中插入数据:
INSERT INTO mysql.user(host, user, authentication_string, ssl_cipher, x509_issuer, x509_subject)
VALUES ('<host>', '<username>', password('<password>'), '', '', '');
-- 注意!! user 表中的 user 和 host 字段是区分大小写的
--2.使用 FLUSH 命令让用户生效
FLUSH PRIVILEGES;
--创建用户(三)
GRANT <priv_type> ON <db_name>.<table_name> TO '<username>'@'<host>' IDENTIFIED BY [PASSWORD] '<password>';
--<priv_type>: 用户权限
--<db_name>.<table_name> :指定权限使用范围,即用户对指定数据库的指定表有定义的权限,*.* 代表所有数据库的所有表
--'<username>'@'<host>':用法同方式一
--[PASSWORD] '<password>':用法同方式一
--重命名用户
RENAME USER <username> TO <new_username>;
--删除用户
DROP USER <username>; --直接删除
DELETE FROM mysql.user WHERE user='<username>' AND host='<host>'; --删除user中的记录
FLUSH PRIVILEGES;--刷新权限
--用户权限操作
SHOW GRANTS;--查看当前已登录用户权限
GRANT <priv_type> ON <db_name>.<table_name> TO '<username>'@'<host>'; --授权
FLUSH PRIVILEGES; --刷新权限
revoke <priv_type> ON <db_name>.<table_name> FROM '<username>'@'<host>'; --撤销授权
FLUSH PRIVILEGES; --刷新权限
--<priv_type>:权限类型
--select
--update
--delete
--insert
--drop
--alter
--references:外键权限
--index:操作索引权限
--create temporary tables:创建临时表权限
--create view:创建视图
--show view:查看视图源代码
--execute:操作函数权限
--all [privileges]:所有权限
--多个权限之间以逗号分隔
--<db_name>.<table_name>:权限作用范围
--'<username>'@'<host>' :同上
SELECT user,host FROM mysql.user; --查看所有用户和对应的ip
用户密码操作
--修改用户密码
--1.直接使用命令修改
SET PASSWORD FOR <username>@<localhost> = password('<new_pass>');
--2.修改user表的记录
USE mysql;
UPDATE user SET password=password('<new_pass>') WHERE user='<username>' and host='<host>';
FLUSH PRIVILEGES;
--3.命令行
--/System32> mysqladmin -h<host> -u<username> -p<old_pass> password <new_pass>
---忘记密码...怎么办?
--1.关闭 mysql 服务
--2.进入mysql/bin 目录
--3.输入:
--/mysql/bin> mysqld --skip-grant-tables
--skip-grant-tables :启动MySQL服务的时候跳过权限表认证
--4.打开新终端,进入mysql/bin 目录
--5.打开mysql命令行,输入:
USE mysql;
UPDATE USER SET password=password('<new_pass>') WHERE user='<username>' and host='<host>';
FLUSH PRIVILEGES;
数据库操作
SELECT DATABASE();--得到当前打开的数据库
SHOW DATABASES;--查看数据库列表
CREATE DATABASE <db_name>; --创建数据库
DROP DATABASE <db_name>; --删除数据库
USE <db_name>; --切换数据库
SHOW CREATE DATABASE <db_name>; --查看建库语句
小节之外的话 :
本小节主要梳理了,常规操作包含 mysql命令行的登入与登出,用户权限操作,用户密码操作,数据库相关操作