MySQL数据库基础,简单的增删改查及数据库用户管理与授权与撤销权限

一、什么是数据库

  • 将数据以记录加字段的方式存储与多张表中的集合
  • 可以有多个库,每个库中有若干个表

1.1、什么是数据

  • 描述事物的符号记录
  • 包括数字、文字、图形、图像、声音、档案记录等等。
  • 以“记录”的方式按统一的格式进行存储

1.2、什么是表

  • 数据库表由行(纪律)和列(字段)组合而成
  • 列:描述一个物体的字段叫做列,例如:身份证包含了姓名、性别、年龄等信息,姓名就是一个字段,在表中为一个字段。
  • 行:完整描述一个物体所有字段信息的记录在表中叫做行。

数据库管理系统(DBMS)

  • 实现对数据库资源有效组织、管理和存取的系统软件

数据库系统

  • 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
  • 用户可以通过DBMS或应用程序操作数据库

二、数据库的分类

2.1关系型数据库

  • 关系型数据库是基于关系模型的数据库系统
  • 关系模型可用简单的“实体-关系”(E-R)图来表示
  • E-R图中包含了实体(数据对象)、关系和属性三个要素
  • 常见的关系型数据库有 Oracle、MySQL、SQLServer、Informix、Sybase、access、DB2、FoxPRO

2.2非关系型数据库

  • 非关系型数据库也被称作NoSQL(Not Only SQL)
  • 存储数据不以关系模型为依据,不需要固定的表格式
  • 常见的非关系型数据库有 Redis mongoDB memcached postgresql(PG)

2.3关系型数据库 与 非关系型数据库的优势

  • 非关系型数据库的优势:
    • 1.性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
    • 2.可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  • 关系型数据库的优势:
    • 1.复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
    • 2.事务支持:使得对于安全性能很高的数据访问要求得以实现。

三、MySQL数据库介绍

  • 类型:关系型数据库(Oracle旗下产品,已更新至5.7版本)
  • 遵守GPL协议,可以免费使用与修改
  • 特点:开源、成本低、多线程、多用户、基于C/S(客户端/服务器)架构、安全可靠

MySQL商业版与社区版

  • MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
  • MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发维护,可以免费使用
  • 商业版与社区版的区别
    • 商业版组织管理与测试环节更加严格,比社区版更稳定
    • 商业版不遵守GPL,社区版遵守GPL可以免费使用
    • 商业版可获得7*24小时的服务,社区版没有

MySQL 常用的数据类型

  • int:整型(整数型)
  • float:单精度浮点型4字节32为(准确表示到小数点后6位)
  • double:双精度浮点型8字节64位
  • char:固定长度的字符类型
  • varchar:可变长度的字符类型(可设置上限)
  • text:文本类型
  • date:日期类型
  • time:时间类型

MySQL数据库日志(重点)

  • 数据库日志文件用于备份,恢复,是最核心的部分
  • MySQL 与 Oracle 日志有所区别
    • MySQL写一条数据,就会在日志中同步一条
    • Oracle是重做日志组:一个组中至少十三个日志成员,轮流存储日志,还会有另一个组与之同步/备份

MySQL 存储引擎

  • myisam 和 innodb
  • myisam:快速读取,不支持事务
  • innodb:更注重写,支持事务

四、SQL语句概述

SQL语句概述

  • Structured Query Language的缩写,即结构化查询语言
  • 关系型数据库的标准语言
  • 用于维护管理数据库
    • 包括数据查询、数据更新、访问控制、对象管理等功能

SQL分类

  • DDL:数据定于语言——这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
  • DML:数据操纵语言——用于添加、删除和更新数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete和udpate 。
  • DQL:数据查询语言——用于查询数据库记录,关键字 select
  • DCL:数据控制语言——用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

MySQL中6种常见的约束

  • 主键约束:primary key
  • 外键约束:foreign key
  • 非空约束:not null
  • 唯一性约束:unique key
  • 默认值约束:default
  • 自增约束:auto_increment

五、数据库管理操作

5.1 登录数据库

[root@www ~]# mysql -uroot -p //按回车之后输入密码登录
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.26 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

5.2 查看数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

5.3 创建一个库

语法结构 —— CREATE DATABASE 数据库名;

mysql> create database school;
Query OK, 1 row affected (0.00 sec)

mysql> 

5.4 使用某一个库

语法结构 —— USE 数据库名;

mysql> use school;
Database changed
mysql> 

5.5 在库里面创建一张表

语法结构 —— CREATE TABLE 表面那个 (字段1 数据类型,字段2 数据类型 . . . . . . [PRIMARY KEY (主键名)]);
进阶用法 —— CREATE TABLE IF NOT EXISIT 表名 (字段1 数据类型,字段2 数据类型 . . . . . . [PRIMARY KEY (主键名)]);
表示在创建表之前先判断库中是否有这个表,如果有就不创建,没有就创建

mysql> create table student (id int(4) not null primary key,name varchar(20) not null,age int(3) not null,address varchar(30));
Query OK, 0 rows affected (0.03 sec)

mysql> 

5.6 查看表结构

语法结构 —— desc 表名;

mysql> desc student;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | int(3)      | NO   |     | NULL    |       |
| address | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> 

5.7 在表中插入一行记录

语法结构 —— insert into 表名(字段1,字段2,…字段n) values(与前面的字段一一对应);
若表中一个字段位密码,不想查询时明文显示,使用PASSWORD(‘密码的值’)的方式插入。

mysql> insert into student(id,name,age,address) values(1,'zhangsan',20,'beijing');
Query OK, 1 row affected (0.01 sec)//插入一行记录

mysql> insert into student(id,name,age,address) values(2,'lisi',21,'shanghai'),(3,'wangwu',22,'guangzhou');//插入多行记录可以用逗号隔开
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> 

5.8 查询表中的记录

语法结构 —— select * from 表名;select * from 表名 where 条件表达式(精确查找,常用);

mysql> select * from student;
+----+----------+-----+-----------+
| id | name     | age | address   |
+----+----------+-----+-----------+
|  1 | zhangsan |  20 | beijing   |
|  2 | lisi     |  21 | shanghai  |
|  3 | wangwu   |  22 | guangzhou |
+----+----------+-----+-----------+
3 rows in set (0.00 sec)

mysql> select * from student where id=1;
+----+----------+-----+---------+
| id | name     | age | address |
+----+----------+-----+---------+
|  1 | zhangsan |  20 | beijing |
+----+----------+-----+---------+
1 row in set (0.00 sec)

mysql> select * from student where name='zhangsan';
+----+----------+-----+---------+
| id | name     | age | address |
+----+----------+-----+---------+
|  1 | zhangsan |  20 | beijing |
+----+----------+-----+---------+
1 row in set (0.00 sec)

mysql> 

5.9 修改表中的记录

语法结构 —— update 表名 set 字段1=值,字段2=值 where 条件表达式;

mysql> update student set age=23,address='shenzhen' where name='zhangsan';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student;
+----+----------+-----+-----------+
| id | name     | age | address   |
+----+----------+-----+-----------+
|  1 | zhangsan |  23 | shenzhen  | //修改成功
|  2 | lisi     |  21 | shanghai  |
|  3 | wangwu   |  22 | guangzhou |
+----+----------+-----+-----------+
3 rows in set (0.00 sec)

mysql> 

5.10 删除表中的记录

语法结构 —— delete from 表名 where 条件表达式;

mysql> delete from student where id=1; //删除id=1的记录
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+--------+-----+-----------+
| id | name   | age | address   |
+----+--------+-----+-----------+
|  2 | lisi   |  21 | shanghai  |
|  3 | wangwu |  22 | guangzhou |
+----+--------+-----+-----------+
2 rows in set (0.00 sec)

mysql> 

5.11 删除表(慎用)

语法结构 —— drop table 表名;

mysql> drop table student;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> 

5.12 删除数据库(慎用)

语法结构 —— drop database 数据库名;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| school             |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> drop database school;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

5.13 复制表的结构及备份表中的数据

语法结构 —— create table 表名(需要创建的) like 表名(需要被复制的);
示例: create table test like student;
语法结构 —— insert into 表名(复制出来的表) select * from 表名(需要被复制的);
示例 :insert into test select * from student;

mysql> create table test like student;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test select * from student;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+----------+-----+-----------+
| id | name     | age | address   |
+----+----------+-----+-----------+
|  1 | zhangsan |  20 | beijing   |
|  2 | lisi     |  21 | shanghai  |
|  3 | wangwu   |  22 | guangzhou |
+----+----------+-----+-----------+
3 rows in set (0.00 sec)

mysql> desc test; //复制过来的表结构是完整的,包括约束
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | int(3)      | NO   |     | NULL    |       |
| address | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql>

5.14 克隆表

语法结构 —— create table 表名(克隆之后的表名) select * from 表名(被克隆的表名);
示例:create table test1 select * from student;

mysql> create table test1 select * from student;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> desc test1; //克隆出来的表只对字段进行了复制,字段的约束并没有复制,约束需要手动修改
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   |     | NULL    |       |
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | int(3)      | NO   |     | NULL    |       |
| address | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from test1;
+----+----------+-----+-----------+
| id | name     | age | address   |
+----+----------+-----+-----------+
|  1 | zhangsan |  20 | beijing   |
|  2 | lisi     |  21 | shanghai  |
|  3 | wangwu   |  22 | guangzhou |
+----+----------+-----+-----------+
3 rows in set (0.00 sec)

mysql> 

5.15 清空表的两种方式

语法结构 —— delete from 表名;
语法结构 —— truncate table 表名;
区别:

  • delete 可以加 where 条件表达式 来删除某一条数据,会被记录日志文件,数据可恢复。不加where表示删除表中所有数据。如果表中的主键是自增约束的话,下一次插入数据的时候,主键不会从1开始,而是从上次删除数据的最大数自增1。属于DML语句
  • truncate 没有where 条件表达式,直接删除表中所有数据,并重建原来的表结构。数据不可恢复,下一次插入数据的时候,主键约束从头开始。属于DDL语句。

5.16 创建临时表

临时表创建成功后,使用 show tables;是看不到创建的临时表的,临时表会在连接退出后被销毁。退出连接之前也可以执行 insert update delete drop 等语句。需要注意的时,临时表无法创建外键。
语法结构 —— create temporary table 表名(字段1 数据类型,字段2 数据类型 . . . . . . [PRIMARY KEY (主键名)]);

mysql> create temporary table test2 (id int(4) not null primary key,name varchar(20) not null,age int(3) not null,address varchar(30));
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student          |
| test             |
| test1            |
+------------------+
3 rows in set (0.00 sec)

mysql> desc test2;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | varchar(20) | NO   |     | NULL    |       |
| age     | int(3)      | NO   |     | NULL    |       |
| address | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> insert into test2 values(1,'lilei',12,'beijing');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test2;
+----+-------+-----+---------+
| id | name  | age | address |
+----+-------+-----+---------+
|  1 | lilei |  12 | beijing |
+----+-------+-----+---------+
1 row in set (0.00 sec)

mysql> quit //退出MySQL
Bye
[root@www ~]# mysql -uroot -p //重新登录
Enter password:  
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use school
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables; //查看表,临时表被删除
+------------------+
| Tables_in_school |
+------------------+
| student          |
| test             |
| test1            |
+------------------+
3 rows in set (0.00 sec)

mysql> 

5.17 修改表结构(增加字段,删除字段,修改字段,添加约束,删除约束)

语法结构:
增加字段:alter table 表名 add 字段 数据类型;
删除字段:alter table 表名 drop 字段;
修改字段:alter table 表名 change 旧字段名 新字段名 数据类型;
添加约束:
1、主键约束:alter table 表名 add constraint PK_XXXID primary key (id);
2、外键约束:alter table 表名 add constranit FK_XXXID foreign key (hobid) references 表名 (字段);
删除约束:
注意点:如果要删除外键约束字段,先删除外键约束,再删除外键名。
alter table 表名 drop foreign key FK_XXXID;
alter table 表名 drop key FK_XXXID;

mysql> alter table test1 add hobid int(2); //增加字段
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql> alter table student change uname name varchar(16); //修改字段
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>
mysql> alter table hobies add constraint PK_hobid primary key(hobid); //添加主键约束
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql> alter table test1 add constraint FK_hobid foreign key (hobid) references hobies(hobid); //添加外键约束
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> 
mysql> alter table test1 drop foreign key FK_hobid; //先删除外键约束
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test1 drop key FK_hobid; //再删除外键名
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 

六、数据库用户管理

6.1 创建新用户

语法结构 —— create user ‘用户名’@‘来源地址’ identified by ‘密码’;
‘用户名’:创建的用户名
‘来源地址’:指定新创建的用户可以在哪些主机上登录,地址来源可以是固定的IP,网段、主机名、本地用户可用localhost,允许任意主机可以使用通配符%。
‘密码’:若直接设置密码是以明文形式,在插入到数据库的时候由MySQL自动加密;若使用加密密码,需要先使用select passsword(‘密码’)获取密文格式的密码,再在语句中添加password ‘加密后的密码’。

mysql> create user 'testuser1'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> select password('123456');
+-------------------------------------------+
| password('123456')                        |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> create user 'testuser2'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
Query OK, 0 rows affected (0.00 sec)

mysql> select User,password,Host from user; //因为我这里是mysql5.6的版本,所以密码对应的字段是password
+-----------+-------------------------------------------+-----------------------+
| User      | password                                  | Host                  |
+-----------+-------------------------------------------+-----------------------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
| root      |                                           | localhost.localdomain |
| root      |                                           | 127.0.0.1             |
| root      |                                           | ::1                   |
|           |                                           | localhost             |
|           |                                           | localhost.localdomain |
| bbsuser   | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | %                     |
| bbsuser   | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | localhost             |
| testuser1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
| testuser2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
+-----------+-------------------------------------------+-----------------------+
10 rows in set (0.00 sec)

mysql>

注意:
MySQL5.6版本中 mysql库里的user表中有passwrod字段和authentication_string字段,用来存放密码
MySQL5.7版本中 mysql库里的user表中没有passwrod字段,密码对应的字段是authentication_string
MySQL5.6 和 5.7 版本在创建用户的时候都会给密码加密并插入表中。

6.2 删除用户

语法结构 —— drop user ‘用户名’@‘地址来源’;

mysql> drop user 'testuser2'@'localhost'; //删除用户
Query OK, 0 rows affected (0.00 sec)

mysql> select User,password,Host from user;
+-----------+-------------------------------------------+-----------------------+
| User      | password                                  | Host                  |
+-----------+-------------------------------------------+-----------------------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
| root      |                                           | localhost.localdomain |
| root      |                                           | 127.0.0.1             |
| root      |                                           | ::1                   |
|           |                                           | localhost             |
|           |                                           | localhost.localdomain |
| bbsuser   | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | %                     |
| bbsuser   | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | localhost             |
| testuser1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
+-----------+-------------------------------------------+-----------------------+
9 rows in set (0.00 sec)

mysql>

6.3 修改用户密码

修改当前登录用户密码:语法结构 —— set password = password(‘密码’);
修改其他用户密码:语法结构 —— set password for ‘’@’’ = password(‘密码’);

mysql> set password = password('123456');//修改当前登录用户密码
Query OK, 0 rows affected (0.00 sec)

mysql> set password for 'testuser1'@'localhost' = password('123456');//修改其他用户密码
Query OK, 0 rows affected (0.00 sec)

mysql> 

忘记密码的解决方式
修改/etc/my.cnf 配置文件,设置免密登录数据库

vim /etc/my.cnf
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
skip-grant-tables //添加此行,设置免密登录数据库

免密登录数据库,修改用户的密码

[root@localhost ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> update mysql.user set authentication_string=password('123456') where User='root'; //修改密码
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql>

修改完密码之后一定不能忘记把免密登录的配置删掉
vim /etc/my.cnf-------> skip-grant-tables //删除此行
注意点:update mysql.user set authentication_string=password(‘123456’) where User=‘root’;
修改密码时一定要用mysql内置的加密函数给明文的密码加密,不然MySQL会认为你设置明文密码就是加密之后的密文密码,下次登录数据库时,输入的密码是123456的明文密码,而MySQL会将你设置的123456的密码进行解密之后再与输入的密码做比较,所以永远不会匹配成功。导致一直登录失败。

6.4 重命名账号

语法结构 —— rename user ‘旧用户名’@‘地址来源’ to ‘新用户名’@‘地址来源’;

mysql> rename user 'testuser1'@'localhost' to 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> select User,password,Host from user;
+----------+-------------------------------------------+-----------------------+
| User     | password                                  | Host                  |
+----------+-------------------------------------------+-----------------------+
| root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
| root     |                                           | localhost.localdomain |
| root     |                                           | 127.0.0.1             |
| root     |                                           | ::1                   |
|          |                                           | localhost             |
|          |                                           | localhost.localdomain |
| bbsuser  | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | %                     |
| bbsuser  | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C | localhost             |
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost             |
+----------+-------------------------------------------+-----------------------+
9 rows in set (0.00 sec)

mysql>

6.5 用户的提权与删除权限

授权语法结构 —— grant 权限列表 on 数据库名.表名 to ‘用户名’@‘地址来源’ identified by ‘密码’;

  • 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,比如:select,insert,update,delete ,使用 all 表示所有权限,可执行任何操作。
  • 数据库名.表名:用于指定对哪个库哪张表进行授权,其中可以使用通配符“”。(*.*)表示所有库的所有表。
  • ‘用户名’@‘地址来源’:用于指定用户名称和允许访问的客户机地址。
  • identified by ‘密码’:用于设置用户连接数据库时的密码字符串。
    刷新权限:flush privileges;
    查看权限语法结构 —— show grants for ‘用户名’@‘地址来源’;
    示例:
    授权zhangsan用户只可以从本机登录并且只对mysql库中所有表只有select权限
mysql> grant select on mysql.* to 'zhangsan'@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges; 刷新权限,不要忘记
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'zhangsan'@'localhost';
+-----------------------------------------------------+
| Grants for zhangsan@localhost                       |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost'        | //usage 表示可以登录
| GRANT SELECT ON "mysql".* TO 'zhangsan'@'localhost' | 
+-----------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
[root@localhost ~]# mysql -uzhangsan -p123456
......//省略部分内容
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select User,Host from user; //select操作没有问题 
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| bbsuser       | %         |
| bbsuser       | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| zhangsan      | localhost |
+---------------+-----------+
6 rows in set (0.00 sec)

mysql> update user set Host='%' where User='zhangsan'; //修改权限被拒绝
ERROR 1142 (42000): UPDATE command denied to user 'zhangsan'@'localhost' for table 'user'
mysql> 

撤销权限语法结构 —— revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘地址来源’;

mysql> revoke select on mysql.* from 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'zhangsan'@'localhost';
+----------------------------------------------+
| Grants for zhangsan@localhost                |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost' |
+----------------------------------------------+
1 row in set (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> 

注意点:怎么授权就怎么撤销权限,必须一致

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值