一、什么是数据库
- 将数据以记录加字段的方式存储与多张表中的集合
- 可以有多个库,每个库中有若干个表
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>
注意点:怎么授权就怎么撤销权限,必须一致