MySQL必知必会—概念篇


MySQL 安装

推荐几个 MySQL 安装和连接的经验文章

MySQL 应用

mysql 命令行

  • 命令输入在 mysql> 之后;
  • 命令用 ; 或 g 结束,换句话说,仅按 Enter 不执行命令;
  • 输入 help 或 h 获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入 help select 获得试用 SELECT 语句的帮助);
  • 输入 quit 或 exit 退出命令行。

连接数据库

连接数据库需要以下信息:

  • 主机名(计算机名)——如果连接到本地 MySQL 服务器,为 localhost ;
  • 端口(如果使用默认端口 3306 之外的端口);
  • 一个合法的用户名;
  • 用户口令(如果需要)

例如下面的指令:

mysql -u root -h localhost -P 3306 -p

数据库的登录和成员管理

访问控制

MySQL 服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。

需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制。访问控制的目的不仅仅是防止用户的恶意企图,访问控制也有助于避免很常见的无意识错误的结果,如错打 MySQL 语句,在不合适的数据库中操作或其他一些用户错误。

管理用户

查询已有用户

MySQL 用户账号和信息存储在名为 mysql 的 MySQL数据库中。一般只有在需要获得所有用户账号列表时才会直接访问。

# 输入
USE mysql;
SELECT user FROM user;

# 输出
+------------------+
| user             |
+------------------+
| test             |
| root             |
+------------------+
创建用户账号
1、使用 CREATE USER 语句(推荐)
# 输入
CREATE USER chenfangxu IDENTIFIED BY '123456';
SELECT user FROM user;

#输出
+------------------+
| user             |
+------------------+
| chenfangxu       |
| test             |
| root             |
+------------------+
2、GRANT 语句也可以创建用户账号。(MySQL 8.0以上的新版本已经将创建账户和赋予权限分开了,所以不能再用这种方法创建用户了)
# mysql8.0以下
GRANT SELECT ON *.* TO chenfangxu@'%' IDENTIFIED BY '123456';
3、使用 INSERT 直接插入行到 user 表来增加用户(不建议)
设置访问权限

在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。他们能登录 MySQL ,但不能看到数据,不能执行任何数据库操作。


查看赋予用户账号的权限 SHOW GRANTS FOR
# 输入
SHOW GRANTS FOR chenfangxu;

# 输出
+----------------------------------------+
| Grants for chenfangxu@%                |
+----------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%` |
+----------------------------------------+

权限 USAGE ON *.* ,USAGE表示根本没有权限,这句话就是说在任意数据库和任意表上对任何东西没有权限。

chenfangxu@% 因为用户定义为 user@host, MySQL的权限用用户名和主机名结合定义,如果不指定主机名,则使用默认的主机名%(即授予用户访问权限而不管主机名)。


添加(更新)用户权限 GRANT privileges ON databasename.tablename TO 'username'@'host';
# 输入
GRANT SELECT ON performance_schema.* TO chenfangxu@'%';
SHOW GRANTS FOR chenfangxu;

# 输出
+------------------------------------------------------------+
| Grants for chenfangxu@%                                    |
+------------------------------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%`                     |
| GRANT SELECT ON `performance_schema`.* TO `chenfangxu`@`%` |
+------------------------------------------------------------+


撤销用户的权限 REVOKE privileges ON databasename.tablename FROM 'username'@'host';
# 输入
REVOKE SELECT ON performance_schema.* FROM chenfangxu@'%';
SHOW GRANTS FOR chenfangxu;

#输出
+----------------------------------------+
| Grants for chenfangxu@%                |
+----------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%` |
+----------------------------------------+


重命名

重命名:RENAME USER 'username' TO 'newusername';
# 输入
RENAME USER test TO test1;
SELECT user FROM user;

# 输出
+------------------+
| user             |
+------------------+
| test1            |
| root             |
+------------------+


更改用户密码(mysql 8.0.11后)

更改用户密码:SET PASSWORD FOR 'username'@'host' = 'newpassword';
SET PASSWORD FOR chenfangxu@'%' = '654321';

# 更改root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';


删除用户

删除用户:DROP USER 'username'@'host';
# 输入
DROP USER chenfangxu@'%';
SELECT user FROM user;

#输出
+------------------+
| user             |
+------------------+
| test             |
| root             |
+------------------+

MySQL 5 以前, DROP USER 只能用来删除用户账号,不能删除相关的权限。因此,如果使用旧版的 MySQL 需要先用 REVOKE 删除与账号相关的权限,然后再用 DROP USER 删除账号。

操作数据库

# 创建数据库,如创建 learnsql 数据库
CREATE DATABASE learnsql;

# 选择数据库,如选择 learnsql 数据库
USE learnsql;

# 显示数据库列表
SHOW DATABASES;

# 显示数据库内的表的列表
SHOW TABLES;

# 显示表中每一列的详细信息
SHOW COLUMNS FROM customers;

DESCRIBE 语句

MySQL 中 DESCRIBE 可以作为 SHOW COLUMNS FROM 的快捷方式。

# 以下两种命令结果相同
SHOW COLUMNS FROM customers;
DESCRIBE customers;

一个持续更新的github笔记,链接地址:Front-End-Basics,可以watch,也可以star。

此篇文章的地址:MySql必知必会


方旭
3.3k 声望1.7k 粉丝

移山之志,一点一滴。