Mysql_常规操作

001、数据库 全局操作

# 连接数据库:
# mysql -h主机地址 -u用户名 -p(登陆用户密码)    

# 修改用户密码 mysqladmin
# mysqladmin -u root -password 密码

# 查看数据库的版本:
mysql > select version();      

# 查看当前时间:      
mysql> select current_time();  

# 查看日期:    
mysql> select current_date();      

# 查看当前日期时间:
mysql> select now;      

# 查询数据库运行时间
mysql > show global status like '%uptime%';

# 查询数据库全局变量
mysql > show global variables;

# 查看当前用户:
mysql > select current_user();  

# 查看数据表字符集
mysql > show variables like 'character_set%';

# 更改默认字符集
mysql> set character_set_database=utf8mb4;

# 查看存储引擎
mysql>show engines;

# 查看变量
mysql>show variables;

# 模糊搜索
mysql>show variables like '%data%'   data可以变化为自己想要模糊搜索的东西

# 查询数据库全局状
mysql > show global status;

# 查询数据库链接数
mysql > show processlist;参数解释:

Aborted_clients             由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。
Aborted_connects         尝试已经失败的MySQL服务器的连接的次数。
Connections                   试图连接MySQL服务器的次数。
Created_tmp_tables       当执行语句时,已经被创造了的隐含临时表的数量。
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。
Delayed_writes               用INSERT DELAYED写入的行数。
Delayed_errors               用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。
Flush_commands           执行FLUSH命令的次数。
Handler_delete               请求从一张表中删除行的次数。
Handler_read_first           请求读入表中第一行的次数。
Handler_read_key           请求数字基于键读行。
Handler_read_next           请求读入基于一个键的一行的次数。
Handler_read_rnd             请求读入基于一个固定位置的一行的次数。
Handler_update               请求更新表中一行的次数。
Handler_write                   请求向表中插入一行的次数。
Key_blocks_used             用于关键字缓存的块的数量。
Key_read_requests           请求从缓存读入一个键值的次数。
Key_reads                       从磁盘物理读入一个键值的次数。
Key_write_requests         请求将一个关键字块写入缓存次数。
Key_writes                       将一个键值块物理写入磁盘的次数。
Max_used_connections     同时使用的连接的最大数目。
Not_flushed_key_blocks     在键缓存中已经改变但是还没被清空到磁盘上的键块。
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。
Open_tables                       打开表的数量。
Open_files                         打开文件的数量。
Open_streams                   打开流的数量(主要用于日志记载)
Opened_tables                   已经打开的表的数量。
Questions                           发往服务器的查询的数量。
Slow_queries                       要花超过long_query_time时间的查询数量。
Threads_connected             当前打开的连接的数量。
Threads_running                 不在睡眠的线程数量。
Uptime                               服务器工作了多少秒。


# 查询语句:
①所有记录
mysql > select * from 数据库名称.数据表名称;
使用use已经切换到需要操作的库
mysql > select * from 数据表名称;
②查询字段等于值
mysql > select * from 数据表名称 where 字段名='值';
③查询字段大于值
mysql > select * from 数据表名称 where 字段名 > '值';  


# 启动mysqld服务端,忘记密码或者无密码传递的参数
[root@localhost ~]# systemctl start mysqld --skip-grant-tables --user=mysql &   (这里是7的启动方法)


# 创建库,表
①:创建库
create database db01;
②:创建库的时候并指定字符集gbk
create database db01 default charset gbk;
③:如果不存在db01这个库就创建,并指定字符集
create database if not exists db01 default character  set utf8;
④:创建表
   1、先使用决定要创建表的那个数据库   use db1;
   2、查看当前的表   show tables;
   3、创建想要的表   create table t1 (id int,name varchar(10),....)   这里括号里面的内容可以根据实际情况自行设定
   4、查看自己对这个表设定的结构是不是自己想要的     desc t1;
   

# 查看数据库中的外键配置项
mysql > show variables like 'foreign%'
- SET foreign_key_checks = 0; // 先设置外键约束检查关闭,则表示不检查外键约束.
- SET foreign_key_checks = 1; // 先设置外键约束检查开启,则表示检查外键约束.

002、数据库 备份与恢复

一、数据库的备份与恢复概念

1、数据库备份与恢复重要性

为保证数据库的可靠性和完整性,数据库管理系统通常会采取各种有效的措施来进行维护。尽管如此,在数据库的实际使用过程中,仍然存在着一些不可预估的因素会造成数据库运行事务的异常中断,从而影响数据的正确性,甚至会破坏数据库,使数据库中的数据部分或全部丢失。

这些因素可能是

  • 计算机硬件故障

  • 计算机软件故障

  • 病毒

  • 人为误操作

  • 自然灾害

  • 盗窃

面对这此可能的因素会造成数据丢失或被破坏的风险,数据库系统提供了备份和恢复策略来保证数据库中数据的可靠性和完整性。

数据库备份是指通过导出数据或者复制表文件的方式来制作数据库的副本。数据库恢复则是当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库从错误状态恢复到备份时的正确状态。数据库的恢复是以备份为基础的,它是与备份相对应的系统维护和管理操作。系统进行恢复操作时,先执行一些系统安全性的检查,包括检查所要恢复的数据库是否存在、数据库是否变化及数据库文件是否兼容等,然后根据所采用的数据库备份类型采取相应的恢复措施。

另外,通过备份和恢复数据库,也可以实现将数据库从一个服务器移动或复制到另一个服务器的目的。

2、使用SQL语句备份与恢复表数据

备份数据:SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中进行备份。

恢复数据:LOAD DATA…INFILE语句来恢复先前备份的数据。

以上方法有一点不足,只能导出或导入数据的内容,不包括表结构,若表结构文件损坏,则必须先恢复原来的表结构。

二、使用客户端备份与回复数据库

1、备份数据库

# 数据库的备份
- 全量备份
- 增量备份
- 逻辑备份
- 物理备份

# 备份数据库到指定的路径文件中
①备份整个数据系统
mysqldump  -h登录主机 -u用户 -p密码  --all-database > 备份到的路径
②某一个库级备份:
mysqldump  -h登录主机 -u用户 -p密码  --databases 数据库名字 > 备份到的路径
③表级备份:
(备份单个表)
mysqldump -h登录主机  -u用户  -p密码 哪个数据库 数据库里的表 > 要备份到的路径      
(备份多个表)
mysqldump -h登录主机  -u用户  -p密码 哪个数据库 数据库里的表1   数据库里的表2 > 要备份到的路径  


说明:-h可以省略
-p与密码之间不能有空格

2、恢复数据

恢复数据库
mysql -uroot -p密码 数据库名 < 被愤怒数据的路径
恢复数据库中的表
mysql -uroot -p密码 数据库名.数据库中的表名 < 已备份数据的路径

3、使用source 指令恢复数据库

mysql > use 数据库;
-- 恢复数据
mysql > source 备份文件的绝对路径

三、二进制日志文件的使用

1、开启日志文件

运行MySQL服务器时若启用二进制日志,系统的性能会有所降低,而且会浪费一定的存储空间,因而MySQL默认是不开启二进制日志功能的,需要手工来启用。具体操作如下:

1)打开MySQL安装目录下的my.ini文件(若是Linux系统,则打开my.cnf文件)。

2)找到[mysqld]这个标签,在此标签下面,添加以下格式的一行语句:

log-bin[=filename]

其中log_bin说明要开启二进制日志文件,可选项filename则是二进制日志文件的名称。加入该选项后,服务器启动时就会加载该选项,从而启用二进制日志。如果filename包含有扩展名,则扩展名则被忽略。MySQL服务器会为每个二进制日志文件名后面自动添加一个数字编号扩展名,每次启动服务器或刷新日志时都会重新生成一个二进制日志文件,其扩展名中的数字编号依次递增。如果filename未给出,则默认为主机名。

3)保存修改,重启MySQL服务器。此时,在MySQL安装目录的DATA文件夹下就可以看到这样两个格式的文件:filename.数字编号、filename.index。其中,“filename.数字编号”是二进制日志文件,它以二进制形式存储,用于保存数据库更新信息,当这个日志文件的大小达到最大时,MySQL会自动创建一个新的二进制文件。“filename.index 是服务器自动创建的二进制日志索引文件,包含所有使用的二进制日志文件的文件名。

2、使用mysqlbinlog工具处理日志

MySQL服务器开启日志后,系统会自动生成二进制日志文件可以通过使用工具mysqlbinlog来处理。

☆ 查看二进制日志文件

可以使用mysqlbinlog查看二进制日志文件,基本格式:

mysqlbinlog  [options]  log_files...

其中,log_files是二进制日志的文件名。

案例:查看二进制日志文件bin_log.000001的内容。

mysqlbinlog  bin_log.000001

按回车即可执行,由于二进制日志数据可能会非常庞大,无法在屏幕上延伸,此时可以采用重定向的方法将二进制日志数据保存到一个文本文件中,以便查看。因此,以上命令可以修改为:

mysqlbinlog  bin_log.000001 > c:ackupin_log000001.txt
☆ 使用二进制恢复数据

假设系统管理员在本周一下午五点公司下班前,使用myqldump工具进行了数据库db_school的一个完全备份,备份文件为alldata.sql。接着,从本周下午五点开始启用日志,bin_log.000001文件保存了从本周一下午五点到本周三上午九点的所有更改信息,在本周三上午九点运行一条日志刷新语句,即“FLUSH LOGS;" ,此时系统自动创建了一个新的二进制日志文件bin_log.000002,直至本周五上午十点公司数据库服务器系统崩溃。现要求将公司数据库恢复到本周五上午十点系统崩溃之前的状态。

这个恢复过程可以分为三个步骤来完成:

第一步:恢复到本周一下午五点前的状态:

mysqldump  -u  root  -pmysql  db_school < alldata.sql;

第二步:使用mysqlbinlog工具将数据库回复到本周三上午九点之前的状态:

mysqlbinlog  bin_log.000001  |  mysql -u root -pmysql

第三步:使用mysqlbinlog工具将数据库恢复到本周五上午十点系统崩溃之前的状态

mysqlbinlog  bin_log.000002  |  mysql -u root -pmysql

至此完成整个恢复过程。

由于二进制日志文件会占用很大的硬盘资源,所以需要及时清除没用的二进制日志文件,清除所有日志,基本语法:

RESET MASTER;

倘若需要删除部分日志文件,则可以使用PURGE MASTER LOGS来实现:

基本语法:

PURGE  {MASTER | BINARY}  LOGS  TO  'log_name'

PURGE {MASTER | BINARY}  LOGS  BEFORE  'date'

说明:

第一条语句用于删除指定的日志文件,其中log_name为文件名。第二条语句用于删除事件date之间的所有日志。


 

003、库 相关操作

1、创建数据库

基本语法:

create database db_name;

 

2、选择数据库

数据库创建完成后,我们可以使用SQL语句创建好数据库之后,可以选择某个数据库为当前数据库。

基本语法:

USE db_name;

只有使用USE命令指定某个数据库为当前数据库之后,才能对该数据库及其存储的数据对象执行各种操作。

3、查看数据库

基本语法:

SHOW {DATABASES | SCHEMAS}

执行结果:

数据库名称数据库作用
infomation_schema 保存关于MySQL服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、表字段的数据类型与访问权限等
db_school 自定义数据库
mysql 描述用户访问权限
performance_schema 主要用于收集数据库服务器性能参数
test 用户利用该数据库进行测试工作

4、修改数据库

在MySQL中,数据库的默认字符集为latin1,默认校对规则为latin1_swedish_ci。使用ALTER DATABASES或ALTER SCHEMA语句可以修改数据库默认字符集和字符集的校对规则,基本语法:

ALTER {DATABASE | SCHEMA} db_name
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name;

案例:修改已有数据库db_school的默认字符集和校对规则。

./media/image-20180913112503543.png)

5、删除数据库

删除数据库是将已创建的数据库文件夹从磁盘空间上清除,数据库中的所有数据也将同时被删除,基本语法:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

案例:删除数据库db_school

./media/image-20180913112814658.png)

6、显示数据库

 show databases; (注意:最后有个 s)

7、查看当前连接的数据库:

mysql > select database(); 

8、修改数据库的字符集

①:临时修改
mysql> set character_set_databases=utf8mb4;
mysql>set character_set_server=utf8mb4;
②:永久修改
vim my.cnf
[muysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci(可省略)

 

004、表 相关操作

1、创建表

基本语法:

    mysql> CREATE TABLE tb_student
(
studentNo INT NOT NULL UNIQUE,
  studentName varchar(20) NOT NULL,
  sex CHAR(2),
  addtime DATE
) ENGINE=InnoDB;

CREATE TABLE tbl_name
(
字段名1 数据类型 [列级完整性约束条件] [默认值],
  字段名2 数据类型 [列级完整性约束条件] [默认值],
  ...
  [表级完整性约束条件]
) [ENGINE=引擎类型];

备注: NOT NULL 代表非空约束,代表当前字段值不能为空。

    UNIQUE代表唯一性约束,代表当前字段值不能重复,必须唯一

2、查看表

☆ 查看数据表名称

SHOW TABLES [{FROM | IN} db_name];

☆ 查看数据表结构

- SHOW columns {FROM | IN} tb_name [{FROM | IN} db_name];
mysql > desc 数据表名称;
mysql > show columns from 数据表名称;

☆ 查看数据表创建的详细结构

    mysql > show create table 数据表名称G;
G代表将SQL执行结果进行纵向显示,可以替代SQL结束符分号;

3、修改表

☆ 添加字段

ALTER TABLE tb_name ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名];
备注:
FIRST:代表将新添加的字段设置为第一个
AFTER 已有字段名:代表将新添加的字段置于已有字段名之后
如果没有这两个关键词,新添加字段将置于数据表的最后一列。

☆ 修改字段名称+类型

ALTER TABLE tb_name CHANGE [COLUMN] 原字段名 新字段名 数据类型 [约束条件];

☆ 修改字段默认值

ALTER TABLE tb_name ALTER [COLUMN] 字段名 {SET | DROP} DEFAULT;

☆ 修改字段类型

ALTER TABLE tb_name MODIFY [COLUMN] 字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名];

☆ 删除字段

ALTER TABLE tb_name DROP [COLUMN] 字段名;

4、重命名表

1.RENAME [TO]
语法:
ALTER TABLE 原表名 RENAME [TO] 新表名;

2.RENAME TABLE
语法:
RENAME TABLE 原表名1 TO 新表名1[,原表名2 TO 新表名2]......;

5、修改表引擎并查看是否修改成功

mysql > alter table  t1(数据表名称) engine=(MyISAM)要修改为的引擎名称;
mysql> show create table t1;   查看修改存储引擎是否成功

6、删除表

DROP TABLE [IF EXISTS] 表1[,表2]......
# 查看数据表结构
mysql > desc 数据表名称;
mysql > show columns from 数据表名称;
mysql > show create table 数据表名称G;

# 查看数据表的详细信息
mysql> show create table 数据表名G;
G代表将SQL执行结果进行纵向显示,可以替代SQL结束符分号;

# 修改表 (添加字段)
- 在tb_student数据表中添加一个出生日期(birthday)字段,数据类型为date,并置于性别(sex)之后。
mysql > ALTER TABLE tb_student ADD COLUMN birthday date after sex;
- 基本语法:
mysql > ALTER TABLE tb_name ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名];
# 备注:
FIRST:代表将新添加的字段设置为第一个
AFTER 已有字段名:代表将新添加的字段置于已有字段名之后
如果没有这两个关键词,新添加字段将置于数据表的最后一列。


# 修改表 (修改字段名称+类型)
- 将数据库db_school中表tb_student的字段birthday重命名为age,并将其类型更改为TINYINT,允许其为NULL,默认值为18。
mysql > ALTER TABLE tb_name CHANGE COLUMN birthday age TINYINT NULL DEFAULT 18;
- 基本语法:
mysql > ALTER TABLE tb_name CHANGE [COLUMN] 原字段名 新字段名 数据类型 [约束条件];


# 修改字段默认值
- 将数据库db_school中表tb_student的字段age默认值删除。
mysql > ALTER TABLE tb_student ALTER COLUMN age DROP DEFAULT;
- 基本语法:
mysl > ALTER TABLE tb_name ALTER [COLUMN] 字段名 {SET | DROP} DEFAULT;


# 删除字段
- 删除数据库db_school中表tb_student的字段age。
mysql > ALTER TABLE tb_student DROP COLUMN age;
- 基本语法:
mysql > ALTER TABLE tb_name DROP [COLUMN] 字段名;

# 删除表中的所有数据:
mysql > delete from 数据表名称;
mysql > delete from 数据表名称 where id>=3;   对要删除的这个数据表进行表的限制删除,限制为id>=3
mysql > truncate table 数据表名称;

# 修改表的语言编码
msyql>alter table t2 default charset=utf8;

# 重命名或者移动表
mysql > rename table d1.t1 to d2.t2;   移动d1库里的t1表到d2库里t2表
msyql > rename table t1 to t2;   把t1表重命名t2

# 查询并修改字段值:
mysql > update 数据表名称 set 修改的字段名称 = '修改为的值' where 查询的字段名称 = ‘查询的值’;

# 在数据表中字段之后假如新字段:
mysql > alter table 数据表名称 add 新增字段名称 字段类型 after 字段名称;

# 修改列名和数据类型
mysql>alter table t2 change id ID bigint;

# 修改列的数据类型
msyql> alter table t2 modify ID int;

# 对表的属性修改
   1、alter table t2 add id int first;   增加一列成为第一列
   2、alter table t2 add id2 ubt after id;   在id后面增加一列叫做id2
   3、alter table t2 drop id2; 删除id2这个列
   4、alter table t2 modify ID int 修改列的数据类型
   5、alter table t2 default  charset=utf8; 修改表的语言编码
   6、rename table db1.t2 to db2.t1; 移动db01库里的t2表到db2库里的t1表里;(保证这两个库的表的结构是一致的)
   7、rename table t1 to t11;   只重命名t1表为t11
   

# 查看完整建表语句:
mysql > show create database 数据库名称 ;      
mysql> grant all[权限] on 数据库.数据表 to 用户名称@'登录ip' identified by '用户密码';
mysql> show grants for 用户名称@'登录ip'G;         查看用户拥有权限
mysql>show grants for user01@'%'; 查找user01用户的所有权限
mysql> drop user ' '@'rhel6.example.com';   删除一个匿名用户

 

005、数据 相关操作

1、增加数据

# 增加数据
- 基本语法:
INSERT INTO tb_name(字段名称1,字段名称2...) VALUES (数据1,数据2...);
特别注意:针对整型、浮点型数据可以不加单引或双引号,但是如果字段类型为字符串或时间类型,其插入的数据必须使用单引号或双引号括起来。

# 批量插入数据:
mysql > insert into 数据表名称 values(值,'值'),(值,'值');

# 对已经存在的表,数据的插入
insert into t1 set id=3,name='li';
(在插入数据的时候是要根据表的结构进行插入)

2、查询数据

- 基本语法:
SELECT {* | 字段名称1,字段名称2...} FROM 数据表名;
备注:
* : 星号代表获取当前表中的所有字段
字段名称1,字段名称2... : 字段列表,代表只获取指定的某个或某些自带

# 查询数据去重
- 基本语法:
select distinct 目标表达式1,目标表达式2...from 数据表;

3、修改数据

UPDATE 数据表名称 SET 字段名称1=新字段的值1[,字段名称2=新字段的值2] WHERE 字段名称=字段值;

4、删除数据

-- 删除指定的某条记录
DELETE FROM 数据表名称 WHERE 字段 = 字段值;

-- 删除所有记录
DELETE FROM 数据表名称;

 

# 导入已有的sql语句:
mysql> source sql语句的绝对路径                            
# 修改某一个库中的表中的某一列的字符集
①:先查看这一列对应的表的结构的信息
mysql > show create table td_student1;
②:在根据上述看出的结果进行需要的修改
mysql > alter table td_student1 change studentName studentName VARCHAR(20) CHARACTER SET utf8 NOT NULL;  
解析:更改 td_student1 这个表的 studentName 这一列的字符集为utf8,更改时要看①得出的信息进行对应的修改。也可以根据①得出的信息,进行模仿似的修改。


# 更新主键约束
- 语法结构:
mysql > alter table 表名 add constraint 约束名 PRIMARY KEY(主键字段);
- 实例:
mysql > alter table tb_student ADD CONSTRAINT PK_student PRIMARY KEY(studentNo);
##注意:CONSTRAINT只能应用于表级约束完整性,谨记谨记!!!

# 删除主键约束
mysql > alter table tb_student drop PRIMARY KEY;

#添加候选键约束(UNIQUE)
- 实例(列级别的候选键约束):
create table if not exists tb_student
(
classNo INT UNSIGNED NOT NULL PRIMARY KEY,
  className varchar(20) NOT NULL UNIQUE,
department varchar(30) NOT NULL,
  grade SMALLINT,
classNum TINYINT
) ENGINE=InnoDB;

# 更新候选键约束
- 基本语法:
mysql > alter table 表名 add constraint 约束名 UNIQUE KEY(字段名);
- 实例:
mysql > alter table tb_class ADD CONSTRAINT UQ_class UNIQUE KEY(className);


# 查询数据去重(去除一张表里的相同的列的重复项)
mysql > select distinct studentNo,studentName from 数据表;
+-----------+-------------+
| studentNo | studentName |
+-----------+-------------+
|         1 | 张晓勇     |
|         2 | 王一敏     |
|         3 | 江山       |
|         4 | 李明       |
|         5 | 黄菊       |
|         6 | 李明       |
+-----------+-------------+
6 rows in set (0.00 sec)


# 字段别名
mysql > select studentNo as 学号,studentName as 姓名 from tb_student;
+--------+-----------+
| 学号   | 姓名     |
+--------+-----------+
|      1 | 张晓勇   |
|      2 | 王一敏   |
|      3 | 江山     |
|      4 | 李明     |
|      5 | 黄菊     |
|      6 | 李明     |
+--------+-----------+
6 rows in set (0.00 sec)

 

006、数据库 访问控制与安全管理

1、用户账号管理

1、查看系统所有用户

nysql > select user,host,password from mysql.userG;

2、创建用户账号

create user '用户名'@'host' identified by passwd '用户名的密码';

# 这里的host表示的是这个用户可以通过哪种方式来连接数据库,一般为:
localhost   本机
127.0.0.1   通用IP
11.12.13.14 指定IP

3、修改用户账号

rename uesr 'old_user'@'host' to 'new_user'@'host';

4、删除用户账号

drop user  用户名@host;
例子:
drop user wangwu@localhost;

# 删除mysql中的匿名用户
mysql>delete from mysql.user where user=' ';

5、修改用户口令(密码)

set password for '需要修改的用户名'@'host'=password('需要修改用户的新密码');

2、账户权限管理

1、账户权限管理

# 查看指定用户所拥有的权限
mysql > show grants for '用户名'@'host';

2、权限的授予

# 授予指定用户指定的权限
grant 权限 on 库名.库中表名 to '用户名'@'host';


# 权限
- 表权限    'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'
- 列权限   'Select', 'Insert', 'Update', 'References'
- 过程权限   'Execute', 'Alter Routine', 'Grant'

# 权限说明
权限               权限级别                   权限说明
CREATE           数据库、表或索引       创建数据库、表或索引权限
DROP             数据库或表             删除数据库或表权限
ALTER             表                   更改表,比如添加字段、索引等
DELETE           表                   删除数据权限
index             表                   插入权限
select           表                   查询权限
UPDATE           表                   更新权限
CREATE VIEW       视图                 创建视图权限
SHOW VIEW         视图                 查看视图权限
CREATE ROUTINE   创建视图               创建试图权限
ALTER ROUTINE     存储过程               更改存储过程权限

3、权限的转移与限制

☆ 转移权限

如果将WITH子句指定WITH GRANT OPTION,则表示TO子句中所指定的所有用户都有把自己所拥有的权限授予其他用户的权限,而无论那些其他用户是否拥有该权限。

案例1:授予不存在用户zhaoliu在数据库db_school的表tb_student上拥有SELECT/UPDATE的权限,并允许其可以将自身的这个权限授予其他用户。

grant select update on db_school to 'tianqi'@'localhost' identified by '1111' with grant option;

案例2:授予用户tianqi在db_school中表tb_student上每小时只能处理一条DELETE语句的权限

grant select update on db_school.tb_student to 'tianqi'@'localhost' identified by '1111' with max_queries_hour 1;
☆ 权限的撤销

当要撤销一个用户的权限,而又不希望将该用户从系统中删除时,可以使用REVOKE语句来实现,其常用的语法格式:

回收某些特定的权限:

# 回收权限 
revoke 权限 on mysql.user from user@host   撤销指定用户的权限
revoke all privileges,grant option from stu4@'%'     撤销指定用户所有的权限

其他介绍

# where条件
- 数字 >、<、=、>=、<=、<>
   - 字符串 =、''、>、<、>=、<=、<>、!=
- 逻辑运算符:
not ( ! ) 逻辑非
or ( || ) 逻辑或
and ( && ) 逻辑与
- 范围判断
in (not in)
between (not between)
like (not like) % _
- 关于NULL
is null
is not null

# 逻辑运算例子:
and | or| not
select * from t1 where math >= 60 and english >= 60;
select * from t1 where math >= 60 or english >= 60; 其中一科及格
select * from t1 where math >= 60 and not english >= 60;  
   
# 通配符:
% 匹配0个或任意多个字符
_ 匹配一个字符
= 精确匹配
like 模糊匹配
regexp 使用正则表达式来匹配

# 排序:
order by 排序,默认升序
asc 升序排列结果
desc 降序排列结果

# 其他:
group by 聚合
having 筛选
distinct 去除重复的行
limit 限制

# 比较运算符:
> , < ,= , != (< >),>= , <=
in ( values1,values2.... )
between v1 and v2 在v1至v2之间(包含v1,v2)

# 例子:
//取500-1000或者3000-5000的值
select * from emp where sal>=3000 and sal <= 5000 or sal >=500 and sal <=1000;
//不在3000与5000之间的值
select * from emp where sal not between 3000 and 5000


# 排序:
select * from emp order by deptno; 默认按照deptno列升序排列  
解析语句:搜索所有来自 emp表   升序排序 emp表中的deptno列。   默认升序排序,这里的升序是指emp表的deptno这一列的数据从上往下慢慢变大,(要看清是对哪个表,哪一列的限制。)
select * from emp order by deptno asc; 指定按照deptno列升序排列,这里的升序是指emp表的deptno这一列的数据从上往下慢慢变大。  
select * from emp order by deptno desc; 指定deptno列按降序排列,这里的降序是指emp表的deptno这一列的数据从上往下慢慢变小。


# limit用法及解析:
①:select * from emp order by sal limit 1;
解析:按照升序的方法查询所有来自emp表的sal列 限制为只取第1个数据
结果:取到了排序好的emp表的sal列的第1个数据
②:select * from emp order by sal limit 1,1;
解析:按照升序的方法查询所有来自emp表的sal列 限制为跳过第1个取第2个数据
结果:取到了排序好的emp表的sal列的第2个数据
③:select * from emp order by sal limit 1,2;
解析:按照升序的方法查询所有来自emp表的sal列 限制为跳过第一个连续取2个数据
结果:取到了排序好的emp表的sal列的第2,3个数据
④:select * from emp order by sal limit 2;
解析:按照升序的方法查询所有来自emp表的sal列 限制为只取前2个数据
结果:取到了排序好的emp表的sal列的前2个数据
⑤:select * from emp order by sal limit 2,1;
解析:按照升序的方法查询所有来自emp表的sal列 限制为跳过了前2个数据只取第3个数据
结果:取到了排序好的emp表的sal列的第3个数据
⑥:select * from emp order by sal limit 2,2;
解析:按照升序的方法查询所有来自emp表的sal列 限制为跳过了前2个数据连续取2个数据
结果:取到了排序好的emp表的sal列的第3,4个数据

 

 
坚持这种真诚,那么总归能遇到良人。
原文地址:https://www.cnblogs.com/jiaxiaozia/p/12157234.html