mysql高级查询

数据库

数据库基础

概念

内存中的数据不能永久保存,因此需要数据库进行保存。而数据库就是按照数据结果来组织、存储和管理数据的仓库

DB

DB是数据库的简称。它的特点:尽可能不重复,以最优的方式为某些特定组织提供多种应用服务,可以对内部的数据进行增、删、改和查。

DBMS

数据库管理系统是一种操作和管理数据库的大型软件,用于建立、适用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库和维护工作。

SQL

结构化查询语言,是一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL使用

允许用户访问关系数据管理系统的数据

让用户来描述数据

允许用户定义数据库中的数据和处理数据

允许使用SQL模块,库和欲辨其的其它语言中嵌入

允许用户创建和删除数据库和表

允许用户创建视图,存储过程,函数在数据库中。

允许用户设置表,过程和视图权限

数据库的术语

数据库:数据库是一些关联表的集合

数据表:表是数据的矩阵。在数据库中标看起来想一个电子表格

列:一列包含了相同的数据,例如邮政编码数据

行:一行是一组相关的数据

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性

主键:主键是唯一的。一个数据表中只能包含一个主键,可以用主键擦寻数据。

外键:外键是关联两个表的。

复合键:复合键将多个列作为一个索引键,一般用于复合索引。

索引:用来开苏访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。

常见基础命令

1.查看当前所有数据库

复制代码
show databases;

2.使用库,对库可以进行操作了

复制代码
use 库名;

3.查看当前库的所有表

复制代码
show tables;

4.查看其它库的表

复制代码
show tables from 库名;

5.创建表

复制代码
create table `student`(
   `id` int auto_increment comment '学号',-- 自增长id comment 注解
    `name` varchar(32),
    `age` int default 18,-- 默认18岁 
    primary key(`id`)-- 唯一字段,不能重复 
)comment='学生表';  

6.查看表结构

7.查看mysql当前所有用户

复制代码
 select `user`,`host` from `mysql`.`user`;
语法规范

1.每条语句背后必须加分号

2.执行过的创建语句不能再执行,可通过选中需要执行的语句进行执行

3.取与关键字相同的名字时加上`名`

4.注释:当行注释 -- 和# 多行注释/*多行文字*/

mysql默认存储引擎

MyISAM

MySAM三个系统文件

表定义文件user.

MyISAM特点:

1.不支持事务

2.表级锁(锁整张表,写操作会阻塞其它读)

3.读性能高

4.文件小,适合只读应用

InnoDB特点:

1.支持事务(可以回滚)

2.行级锁(只锁需要行,不锁整张表)

3.支持外键

4.崩溃恢复能力强

表数据的增/删/改/查/高级查询

创建数据库的方法(数据库后面的为适配字符)

三种:

复制代码
create database test1;#创建数据库
create schema test2;#方法2

第三种

CREATE DATABASE 和 CREATESCHEMA 的区别:SCHEMA 视为 DATABASE 的同义词

选中数据库

复制代码
use test2;#导入外部数据库需要这样选择,要想在命令对话框使用,也需要这个命令

删除数据库

复制代码
drop database test3;

表操作

创建表
复制代码
use test1;#在数据库1中创建表
create table teacher 
( 
  `name`  int comment '姓名',
  `course` int comment'课程'
  
)

(`字符`)可以防止与关键词重合

查看当前数据库的所有表
复制代码
show tables;

关键字

auto_increment:设置对应字符后,这个字符会每插入一次进行一次++。不设置就需要自己指定

comment:给对应的字段进行备注

utf8:数字文字

utf8mb4:数字文字表情

修改表属性
手动查看和添加方法
删除表内容

与SET SQL_SAFE_UPDATES = 0;结合,解决报错

语法 delete from teacher where 字段='数据'

复制代码
delete from teacher where `id`=1;
删除表

drop table

更改内容

语法 update 表名 set 更改的内容(字段=数据) where 条件

复制代码
update teacher set `name`='jks'  where `id`=4;
update teacher set `name`='jack' where `id`=5;
添加数据

语法:

复制代码
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES ( value1, value2,...valueN );

案例:

复制代码
insert into student (`name`,`age`) value('Li',20);
查询数据

语法 selct 字段名 from 表明

复制代码
select `id`,`name`,`course` from teacher;

条件查询

高级查询

查询之后改别名,然后以别名作为字段显示

语法 select `name` as 别名,`age`as 别名 from student;

显示时为别名显示,查询用原名

查询之后添加新的字段到查询结果,并不影响表内字段,而是显示时多了字段和数据,不影响表内数据

查询字段种每行对应字段的数据相加的结果然后单独显示出来

语法 SELECT `name`,(`字段`+`字段`) AS '字段名' FROM 表名;

复制代码
 select `name`,(`score`+`age`) as '年龄+得分' from student;
去当前列中重复数据显示

distinct

去重复查询指定字段(列),然后显示当前存在的字段的数据

条件查询

where 判断语句 :满足语句就显示,可以结合逻辑运算符

查询指定字段的范围内的数据
判断空NULL

语法:字段名 is NULL

前提是定义字段时可以为空

判断空的字符串
模糊查询

模糊查询就是类似于关键字查询 like %放置位置决定位置上有没有数据

语法:字段名 like '%i%' %:为这个位置上要有其它字符

查询对应字段的记录(行) 包含i字符的记录

%所在位置决定是否有字符

分页查询

概念:当数据很多,一次性看到的很少,就可以进行分页查询指定大小的记录。每页最多看多少行,就是应用程序定义的。

语法: limit 开始记录下标,显示记录条数

使用limit 关键字,第一个参数表示从条记录开始显示,第二个参数表示要显示的数目。 表中默认第一条记录的参数为0。

查询从第零行开始,查询两条记录

在显示数据以分页的方式 limit 行号 条数 划分后就可以进行分页查询

排序查询 (可以多个字段排序)

语法:order by 字段 排序规则

字段按顺序进行一一排序,从左到右

desc降序

asc升序

先按性别排升序,再按得分排降序

聚合查询

概念:查询字段的各个状态下是多少

语法:select 关键字(字段) from 表

sum():计算某列的总和

avg():计算某列的平均值

max():计算某列的最大值

min();计算某列的最小值

count():计算某列的行数

分组查询

概念:根据同一字段,不同数据,选择其中一条记录进行显示

语法:group by '字段'

例如:下方多个sex 为1 多个 sex为0 但只会显示两条不同sex的记录

分组查询字段所含记录的个数

连接分组查询

概念:列出字段中不同的数据的代表的记录(不会全显示只会留一条),列出字段中同样数据的记录

联合查询

将两条语句进行结合 union 会去重 union all 不会去重复记录

只要满足其中一个条件就会显示

连表查询

表内连:只取表内有对应关系的记录

左连接:就是对象a有的对象b没有,也会显示,指挥变成null。

右连接:在内连接的基础上保留右表没有对应关系的记录

全连接;在左连接和右连接基础上,全部显示,部分空缺也会显示

子查询:

查询当中包含查询 ,内部查询结果作为返回值给外面当作条件

多行子查询:in关键字:运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查 询。

名字带有i的数据,返回它们的id,此时有0,1,2的id,然后显示id为0,1,2的所有记录

正则表达式

设置格式进行查询

流程控制语句

IF语句

语法:

复制代码
if condition then
     输出语句
elseif condition then 
     输出语句
else
     输出语句
case 语句

语法:

复制代码
case x 
        when 变量 then 输出语句 ;

end case;

while语句

语法:

复制代码
while 判断语句 Do
执行语句
end while;

leave语句

语法:结合while 相当于break leave:while的名字

loop语句

语法: 死循环语句,需要与leave结合

复制代码
loop


end loop

repeat语句

语法:循环直到满足跳出循环,类似于do while

复制代码
repeat 

    until 判断语句(跳出循环)

end repeat 

iterate语句

语法:用于循环语句中,意为退出本次循环进行下一次次循环,类似于continue

SQL语句

DQL语言

查询语言

DML

插入语句 删除语言 修改语言

DDL语言

库和表的管理

表的管理

表的创建

表的修改

修改表名

复制代码
rename to

修改列名

修改列属性

添加列

复制代码
alter table 表名 add column 列名  

删除列

drop column l列名

表复制

create table 表名 select *from 表名 复制数据和表结构

常用约束

主键约束

作用:为了更快的查询到表的记录,需要在表中设置一个主键。主键可以为单字段或多字段

代码实现

手动实现

删除主键约束

drop primary key

唯一的约束:unique key

作用:表明这个字段的的数据不能一样

外键约束

作用:用于约束处于关系内的实体,当前表的某个字段引用另一个表的字段,当前表这个字段就是来源于另一个表的字段。因此这个表的这个字段的数据必须能够在另一表的字段中找到一样的数据。

非空约束

默认值约束

作用:不赋值就使用默认值

DCL语言

作用:用来设置或更改数据库用户或角色权限的语句

crant 语句:允许对象的创建者给某用户或某组或所有用户某些特定的权限

revoke语句:可以废除某用户或某组或所有用户的访问权限

原因:多账户更有私密性和方便管理

查看当前所有用户

复制代码
SELECT User, Host, authentication_string FROM mysql.user;

创建账户

语法

create user '用户名'@'机器访问用户权限' identified by 密码;

示例

复制代码
create user 'jks'@'%' identified by '5320240388';

机器访问用户权限:

host:说明只能在当前ip地址下访问

%:可以被各种ip地址和机器访问

ip地址:只能被指定的ip地址访问

删除用户

复制代码
DROP USER '用户名'@'机器访问权限';

账户权限

作用:决定能否访问当前ip下的所有数据库

授权

将指定数据库授权给账户

语法

给账户所有权限

复制代码
grant select, insert, update, delete on 数据库名.数据库后缀 to '用户名'@'机器访问权限';

案例:

复制代码
grant select,insert,update,delete on mysql_revise.* to 'jks'@'%';

撤销授权

撤销输入权限,其它权限保留

复制代码
revoke insert on mysql_revise.* from 'jks'@'%';

注意事项

更改权限后需要用户重新连接数据库,权限才能生效。

需要用root账号进行撤销

TCL语言

作用:将多条语句组成一个执行单位,一组语句要么不执行,要么全部执行成功。没有执行完时,进行访问还是只会显示最初状态

特点

原子性:一个事务是不可在分割的整体,要么执行要么不执行

一致性:一致性是要保证操作前和操作后数据的一致性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见。

隔离性:一个事务不受其它事务的干扰,多个事务互相隔离

持久性:事务一旦提交了,永久保存到本地

事务处理

1.mysql 默认情况下开启事物,每一条语句单独是一个事物。并且自动提交

自动提交模式

复制代码
show variables like 'autocommit';-- 查看自动提交事务是否开启 

set autocommit=0;-- 禁止自动提交 
set autocommit=1;-- 开启自动提交

用begin(start transaction)、rollback、commit 来实现实现事务执行

复制代码
begin//事务开启
sql语句
commit//事务提交
rollback//事务回滚

事务提交:表明语句执行完成

事务回滚:表明语句执行不成功

索引

查看索引

普通索引

作用:应用于频繁用于where条件的字段,需要排序的字段,需要分组的字段,join连接的字段,字段值有重复但查询频繁。提高查询效率

场景 没有索引 有索引 你的感受
1000条数据查询 0.5秒 0.001秒 几乎感觉不到延迟
10万条数据查询 5秒 0.01秒 瞬间完成,无感知
100万条数据查询 50秒 0.1秒 从"等得烦躁"变成"秒开"

创建索引

create index 索引名 on 表名(字段名)

复制代码
create index `consumername` on `order`(shipping_user);
alter table `order` add index consumerid(customer_id);

删除索引

复制代码
 drop index consumername on `order`;#删除索引
主键索引

作用:唯一性索引,但是它必须指定为primary key,每个表只能由一个主键。

创建主键索引

复制代码
#语法
ALTER TABLE table_name ADD PRIMARY KEY(column_name);

删除主键:主键为自增的时候不能删

复制代码
#语法
ALTER TABLE table_name DROP PRIMARY KEY;
唯一索引

创建

复制代码
#语法
CREATE UNIQUE INDEX indexName ON table_name(column_name);

删除索引

复制代码
 drop index consumername on `order`;#删除索引

主键索引和唯一索引的区别:

特性 主键索引 (Primary Key) 唯一索引 (Unique Index)
本质 特殊的唯一索引 + 表约束 索引约束
唯一性 ✅ 必须保证唯一 ✅ 必须保证唯一
NULL值 绝对不允许(必须有值) ⚠️ 通常允许(但最多只能有一个NULL)
数量限制 ⚠️ 一个表只能有一个 一个表可以有多个
主要用途 1. 唯一标识每一行 2. 作为表间关系的锚点 3. 强制实体完整性 1. 保证业务数据唯一性(如邮箱、手机号) 2. 避免重复值 3. 加速唯一值查询
外键关联 可以被外键引用 不能被外键引用
物理存储 (InnoDB) 聚簇索引(数据按主键顺序存储) 非聚簇索引(需回表查询)
创建方式 PRIMARY KEYUNIQUE UNIQUECREATE UNIQUE INDEX

唯一索引可以有多个,因此可以限制多个字段

但主键只能有一个,它可以与外部连接,并且唯一

全文索引

作用:高效处理文本搜索,支持模糊匹配和相关性排序,解决中文分词难题

组合索引

作用:多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。

索引原则
  1. 对于查询频率高的字段创建索引 索引的目的就是提升查询速度,所以对于查询频率高的字段要创建索引。 如:用户表的手机号。

  2. 对排序、分组、联合查询频率高的字段创建索引;

  3. 索引的数目不宜太多 每创建一个索引都会占用相应的物理控件; 过多的索引会导致insert、update、delete语句的执行效率降低;

  4. 若在实际中,需要将多个列设置索引时,可以采用多列索引

视图

作用:是一种虚拟存在的表,是一个逻辑表,本身不包含数据。其内容由查询定义。

将多个表中的一些数据进行结合起来,取别名,然后放入视图中,查看视图就可以查询到指定规则得到的数据。就是其它项目组可以访问当前项目组的一部分数据的时候,就可以用视图的方式进行查看

优点:

1.简单:使用视图的用户完全不需要关系后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集。

2.安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某行某个列,但是通过视图就可以简单的实现。

3.数据独立:一旦视图的结果确定了,可以屏蔽表结构变化对用户的影响,源表增加对视图没有影响:源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

复制代码
create table`user`
(
`id`int auto_increment comment'编号',
`name`varchar(32)comment'学生姓名',
`sex`tinyint default 1 comment'性别(1:男;0:女)',
`age`tinyint default 18 comment'年龄',
primary key(`id`)
)COMMENT='学生表'engine=Innodb;
create table`goods`
(
`id`int auto_increment comment'编号',
`name`varchar(32)comment'商品名称',
`price`decimal(10,6)default 0 comment'价格',
primary key(`id`)
)COMMENT='商品表'engine=Innodb;
create table`user_goods`
(
`id`int auto_increment comment'编号',
`user_id`int comment'用户ID',
`goods_id`int comment'商品ID',
primary key(`id`)
)COMMENT='用户商品表'engine=Innodb;

#创建视图

create view view_test1
as
select`user`.id as user_id,`user`.`name`as user_name,`user`.`sex`as user_sex,
`user`.`age`as user_age, `goods`.id as goods_id,`goods`.`name`as goods_name
from`user`
join`user_goods`on`user`.id=`user_goods`.user_id
join`goods`on`goods`.id=`user_goods`.goods_id;

这个sql语句可以获取对应id的货物名和货物编号,然后结合用户信息,创建视图。视图就可以查询到这些数据。

搜全视图给用户

复制代码
GRANT ALL PRIVILEGES ON mysql_revise.view_test1 TO 'jks2'@'%';

存储过程

概念:SQL语句需要先编译再执行,而存储过程是一组为了完成特定功能的SQL语句集,经过编译后存储再数据库中,用户通过指定存储过程的名字并且给定参数来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台执行相同函数,或者封装特定功能是,存储过程是非常有用的。数据库中的存储过程可以看作对编程中面向对象方法的模拟,它允许下控制数据的访问方式

作用:多个sql语句,不会进行回滚,执行了就执行了。类似于函数,可以传参数

注意事项:一般处理一个语句,需要用指定分隔符进行分割,才能处理多个sql语句

参数:

in相当于形参,可获取外部定义的变量,但是不能更改外部变量,可以在内部访问,更改,但不影响外部。

复制代码
delimiter //
  create procedure proc_test4(in p_out int)
    begin
     SELECT p_in;
SET p_in=2;
SELECT p_in;
     
     end
     //
     
set @p_in=1;

call proc_test4(@p_in)
SELECT @p_in;

结果:1 2 1

out相当于实参,但是不能读取外部的数据,只能在内部进行更改传给外面

复制代码
delimiter //
  create procedure proc_test3(out p_out int)
    begin
     SELECT p_out;
SET p_out=2;
SELECT p_out;
     
     end
     //
     
set @p_out=1;

call proc_test3(@p_out);
SELECT @p_out;

结果:NULL 2 2

inout:可以在过程中访问外部的数据,也可以在外部访问内部更改后的数据

注意事项:

MySQL默认以";" 为分隔符,如果没有声明分隔符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要实现用"delimiter//"声明当前段分隔符,让编译器将两个"//"之间的内容当作存储过程的代码,不会将;当作分隔符进行分离语句。

游标

作用:游标可以获取当前所在位置的

这个代码执行只会游标才会懂,当为null时,数据还是之前的结果

游标

特性:

不敏感:数据库可以选择不复制结果集

只读

不滚动:游标只能像一方向进行移动,不能跳过

游标优点:

游标是针对行操作的,对从数据库中select查询得到的结果集的每一行可以进行操作

游标缺点:

只能一行一行操作,性能不高,使用游标会产生死锁。

适用场景(只能用在以下场景)

存储过程

函数

触发器

事件

游标操作:

游标

游标定义

复制代码
declare 光标名称 cursor for select 字段名 from 表名

案例:

复制代码
declare mycursor cursor for select teacher_name from teacher;

获取游标数据的步骤

复制代码
open 光标名称

#获取光标的数据

fetch 光标名称 into 定义的变量(按顺序获取变量)
close mycursor 

案例:循环遍历表中内容

复制代码
select *from teacher;
delimiter //
create procedure cursor_demo()
begin
      declare done boolean default false; -- 必须声明这个变量 
      declare `name` varchar(32);
      
declare mycursor cursor for select teacher_name from teacher;

declare continue handler for not found set done=1; -- 当游标遍历完所有数据,自动把done变量设为true,让循环知道该停下来 
 open mycursor;
 cursor_loop:loop
     if done then 
     leave cursor_loop;
     else 
    fetch mycursor into `name`;
     end if;
    select `name`;
   
end loop;
  close mycursor;
end 
//

缺点:会多输出一次最后一行

解决办法:先判断游标,再获取数据

复制代码
 open mycursor;
 cursor_loop:loop
  fetch mycursor into `name`;
     if done then 
     leave cursor_loop;
     end if;
    select `name`;
   
end loop;
  close mycursor;

案例:统计id个数

复制代码
delimiter //
create procedure cursor_demo(out out_id tinyint)
begin
      declare done boolean default false; -- 必须声明这个变量 
      declare `name` varchar(32);
      declare `id` tinyint;
       declare `idsum` tinyint default 0;-- 关键必须初始化 
      
declare mycursor cursor for select teacher_name,teacher_id from teacher;

declare continue handler for not found set done=1; -- 当游标遍历完所有数据,自动把done变量设为true,让循环知道该停下来 
 open mycursor;
 cursor_loop:loop
  fetch mycursor into `name`,id;
     if done then 
     leave cursor_loop;
     else 
     set idsum=idsum+id;
     end if;
    select `name`;
   
end loop;
  close mycursor;
  set out_id= idsum;
end 
//
set @out_id=0;
call cursor_demo(@out_id);
select @out_id;

函数

内置函数

abs:绝对值

round:四舍五入

concat:连接字符串

month:返回年份中月份

系统信息函数

version:版本

user:用户名

md5:加密函数

format(数据,保留小数位数):保留小数

自定义函数

函数与存储过程的区别:函数只会返回一个值,不允许返回一个结果集。函数强调返回值,所以不能有多值返回的情况,即便是查询语句。

语法:

复制代码
create function 函数名 returns 数据类型
begin 
sql 语句;
return 值;
end;

函数只会返回一个值,不允许返回一个结果集(不能使用查看表)

复制代码
DELIMITER  //
create function test_func() returns int
begin
  declare c_id int;
 select @out_id into c_id;
 return c_id;


end//
-- 带参函数
DELIMITER  //
create function test_func2(id int) returns int
begin
  declare c_id int;
 select id into c_id;
 return c_id;


end//


set @myid=10; --  用户定义变量用@开头
select test_func2(@myid);

注意事项:

要修改配置,才能使用函数

查看创建函数的信息

复制代码
show variables like'log_bin_trust_function_creators';
set global log_bin_trust_function_creators=1;

函数查看

复制代码
show create function test_func2;

查看所有函数

复制代码
show function status;

删除函数

复制代码
drop function 函数名;

触发器

概念:触发器是MySQL提供给程序源和数据分析来保证数据完整性,它可以对事件进行处理,当时事件触发时,他会执行一定操作。

触发器的四要素

监视地点:监视的对象

监视事件:监视对象的事件

触发时间:事件发生时,进行操作的顺序

触发事件:事件的类型

小点:value不设置字段名进行插入,即使是自增长也要设置null

对事件处理任务可以是多个

语法:

复制代码
create
    trigger 触发器的名称
触发时间 触发事件 on 触发对象 for 触发对象的字段
触发器的任务

触发器的时间:before事件发生时先处理任务再处理事件 after 事件发生时先处理事件再处理任务

触发器的顺序:各个触发器的执行顺序

触发事件的分类

insert:插入数据时触发,可通过insert、load data、replace 语句

update:更改数据时触发,通过update语句触发

delete: 删除某数据时触发,通过delete和replace触发

案例:创建名为trig_time的触发器,当在work表中插入数据,就会自动往time表里插入当前时间

复制代码
create trigger trigger_time before insert on work for each row
insert into `time` (`time`)value(Now());

insert into `work` (address)value("5322");

select *from `time`;
select *from `work`;
new和old的关键字详解

各种情况下的关键字

  1. 在insert型触发器中,NEW用来表示将要(before)或已经(after)插入的新数据

2.在delete型触发器中,OLD用来表示将要或已经被杀出的原数据

3.update型触发器中,OLD用来表示将要或者已经修改的原数据,NEW用来表示将要或已经修改后的新数据。

触发器有关指令

查看所有触发器的基本信息

复制代码
show triggers;

查看触发器的详细信息

复制代码
SELECT * FROM information_schema.triggers

查看指定触发器的详细信息

复制代码
select * from information_schema.triggers where trigger_name='trig_order';
触发器的案例

目的:下订单时候,对应的商品的库存量要相应减少,集买几个商品减少几个库存

复制代码
create table`goods`(
`id`int primary key auto_increment,
`name`varchar(32),
`num`SMALLINT default 0
);
create table`order`(
`id`int primary key auto_increment,
`goods_id`int,
`quantity`SMALLINT comment'下单数量'
);
insert into goods values(NULL,'C++',40);
insert into goods values(NULL,'C',63);
insert into goods values(NULL,'mysql',87);
insert into`order`values(nuLL,1,3);
insert into`order`values(nuLL,2,4);
select*from`order`;
select*from`goods`;

delimiter //
create trigger trigger_num after insert on `order` for each row
begin
  update goods set num=num-NEW.`quantity` where id=NEW.goods_id;
  end 
//

事件

概念:它别称为事件调度器。它可以作为定时任务调度器,就是替换掉原本需要手动操作才会执行计划的任务,改变为定时自动执行。它一般是自定义一个时间,每隔一段时间就处理。

查看事件调度器是否开启

决定了能否使用所有的时间调度器

语法

复制代码
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

设置事件调度器

复制代码
#关闭事件调度器
set global event_scheduler = OFF;

#开启事件调度器
set global event_scheduler = ON;
事件创建
复制代码
create
    definer={可选,用于定义事件执行时检查权限的用户}
    if not exists 可选项,用于判断要创建的事件是否存在
    event event_name 必选,用于指定事件名
    on schedule schedule 必选,用于定义执行的时间和时间间隔
    on completion [not] preserve 可选用于定义事件是否循环执行
    enable|disable|disable on slave  enable表示事件可以调用
    comment 可选项,用于指定事件的一种属性
   do 事件体
时间设置

在on schedule中,可以设置一个值来规定时间触发时间

语法格式
复制代码
at timestamp 表示一个具体时间节点,后面加上一个时间间隔,表示在这个时间间隔后事件发生。
every子句:用于表示事件在指定事件区间内每隔多长时间发生一次,其中select自居用于指定开始事件;ends自居用于指定结束时间。
interval:表示一个从现在开始的时间,其值有一个数值和单位构成。例如,使用"4 week"表示4周。

quantity{year|quarter|month|day}

查询事件
复制代码
SELECT * FROM information_schema.events;
修改事件
复制代码
alter 
    event 事件名
     on schedule 时间间隔
     on completion [NOT] preserve  #循环次数
     是否开启选项
     事件解释
     do 任务
相关推荐
dishugj14 小时前
【oracle】 RMAN数据库迁移 19c(RAC到单实例)
数据库·oracle
骑着蜗牛闯宇宙14 小时前
TP8上传Excel地址数据批量标注到高德地图
数据库·php·excel
TDengine (老段)14 小时前
TDengine JAVA 语言连接器入门指南
java·大数据·开发语言·数据库·python·时序数据库·tdengine
oMcLin14 小时前
如何在Ubuntu 22.04上通过配置LVM优化存储,提升香港服务器的大规模数据库的读写性能?
服务器·数据库·ubuntu
艾莉丝努力练剑14 小时前
【QT】初识QT:背景介绍
java·运维·数据库·人工智能·qt·安全·gui
Neolnfra14 小时前
openGauss部署配置指南
数据库·opengauss·gaussdb
小股虫14 小时前
心脏手术指南:如何安全地为运行中的系统更换“数据库引擎”?
数据库·安全·架构·方法论
Jsundoku14 小时前
PostgreSQL -- 开源对象-关系型数据库
数据库·postgresql·关系型数据库
SmartRadio15 小时前
物联网云平台数据库选型与搭建全指南(NRF52840, CH585M,ESP32-S3的硬件资源要求选型对比、方案设计、搭建步骤)
c语言·数据库·物联网·lora·lorawan