用户操作
Mysql用户
mysql用户在mysql库下面的user表中
SELECT * FROM mysql.user
身份验证字段
#身份验证字段
#host 访问地址,user 用户名,plugin 密码加密插件,t.authentication_string 经过加密后的密码,password_expired 密码过期,password_last_changed 密码上次修改时间,password_lifetime 密码有效期
SELECT host, user, t.`plugin`, t.authentication_string, t.password_expired
, t.password_last_changed, t.password_lifetime
FROM mysql.user t;
资源限制字段
#资源限制字段
#max_questions:保存每小时允许用户执行查询操作的最多次数。max_updates:保存每小时允许用户执行更新操作的最多次数。max_connections:保存每小时允许用户建立连接的最多次数。max_user_connections:保存允许单个用户同时建立连接的最多数量。
SELECT host, user, t.max_questions, t.max_updates, t.max_connections
, t.max_user_connections
FROM mysql.user t;
权限字段
#权限字段
#Select_priv查询权限、Insert_priv插入权限,Update_priv更新权限,Delete_priv删除权限
SELECT host, user, t.Select_priv, t.Insert_priv, t.Update_priv
, t.Delete_priv
FROM mysql.user t;
账户锁定字段
#账户锁定字段
SELECT host, user, t.account_locked
FROM mysql.user t;
用户操作
#用户操作
#创建用户jhl
create user 'jhl'@'*' identified by '123456';
#创建用户jhl2,每小时最大更新次数是10
create user 'jhl2'@'localhost' identified by '123456'
WITH MAX_UPDATES_PER_HOUR 10;
#创建用户jhl3,密码有效期为180天
create user 'jhl3'@'localhost' identified by '123456'
PASSWORD expire INTERVAL 180 DAY;
#创建用户jhl4,状态为锁定
create user 'jhl4'@'localhost' identified by '123456'
PASSWORD expire account lock;
#更改密码
ALTER user 'jhl2'@'localhost' IDENTIFIED BY '111111';
#更改用户锁定状态
ALTER USER 'jhl4'@'localhost' account UNLOCK;
#更改用户名
RENAME user 'jhl4'@'localhost' TO 'new_jhl'@'localhost';
#删除用户
DROP user if EXISTS 'new_jhl'@'localhost';
用户权限
#查看权限
show grants for 'jhl2'@'localhost';
#默认的:grant 权限 on 数据库.数据表 to 用户名
GRANT usage ON *.* TO 'jhl2'@'localhost';
#设置权限,给jhl2设置查看student表,并且更新name和age字段的权限。
grant all on test03.student to 'jhl2'@'localhost';
#回收权限
#grant授权 all PRIVILEGES代表全部权限
revoke all PRIVILEGES ON test03.student from 'jhl2'@'localhost';
#刷新权限
flush privileges;
视图
视图就是经过保存的临时表
# 创建视图
create view student_view as
select t.*, s.name
from room t
left join student3 s on t.id = s.room_id;
# 替换已有视图,更新视图
create or replace view student_view as
select t.id, s.name
from room t
left join student3 s on t.id = s.room_id;
#更改视图,DEFINER:所属用户,sql SECURITY:指定所属用户使用还是调用用户使用视图
create
or
replace definer = CURRENT_USER () sql SECURITY definer view student_view as
select t.id, s.name
from room t
left join student3 s on t.id = s.room_id;
#在test04库中,创建test01库的student03_view视图
create or REPLACE view test01.student03_view as
SELECT *
from student3;
#查询视图
SELECT *
from student_view;
#修改视图
ALTER VIEW student_view as SELECT *
from room;
#删除视图
drop VIEW student_view;
#视图可以分页
SELECT *
from student_view
LIMIT 3;
#查看视图结构
desc student_view;
#查看视图的状态
show table STATUS like 'student_view';
#查看创建视图的语句
show create view student_view;
事务
事务入门
#2020年04月22日17:01:54
#视图事务
#开启事务
START TRANSACTION;
insert into student3
VALUES (3, '小王', 3);
#事务提交
COMMIT;
START TRANSACTION;
INSERT INTO student3
VALUES (25, '小磊', 4);
#事务回滚
rollback;
#自动提交(也就是默认方式)
SELECT @@autocommit;
#关闭自动提交
set autocommit = 0;
# 类似于版本控制(不过是临时的,就是一个状态)
#创建保存点u2----
SAVEPOINT u2;
UPDATE student3
set room_id=1
WHERE student3.id = 3;
ROLLBACK TO SAVEPOINT u2;
# 保存点在提交后就没了
COMMIT;
事务的隔离级别
#2020年04月24日20:23:13
# 目的:学习事务的隔离级别
# READ UNCOMMITTED(读未提交)
# 设置当前隔离级别为读未提交
SET @@session.transaction_isolation = 'READ-UNCOMMITTED';
begin;
update shop
set shop.price=price - 100
where shop.id = 1;
commit;
select *
from shop;
# READ COMMITTED(读提交)
# 设置当前隔离级别为读提交
SET @@session.transaction_isolation = 'READ-COMMITTED';
begin;
update shop
set shop.price=price - 100
where shop.id = 1;
commit;
select *
from shop;
# REPEATABLE READ(可重复读)
# 设置当前隔离级别为可重复读
SET @@session.transaction_isolation = 'REPEATABLE-READ';
begin;
insert into shop
values (3, 'jhl', '123456', '焦浩亮', 300);
commit;
select *
from shop;
# SERIALIZABLE(序列化)
# 设置当前隔离级别为序列化
SET @@session.transaction_isolation = 'SERIALIZABLE';
begin;
update shop
set shop.price=price - 100
where shop.id = 1;
commit;
select *
from shop;
/*
SQL 标准定义的四种隔离级别被 ANSI(美国国家标准学会)和 ISO/IEC(国际标准)采用,每种级别对事务的处理能力会有不同程度的影响。
四种隔离级别从并发程度由高到低进行描述
READ UNCOMMITTED(读未提交)
该隔离级别的事务会读到其它未提交事务的数据,此现象也称之为脏读。
READ COMMITTED(读提交)
一个事务可以读取另一个已提交的事务,多次读取会造成不一样的结果,此现象称为不可重复读问题,Oracle 和 SQL Server 的默认隔离级别。
REPEATABLE READ(可重复读)
该隔离级别是 MySQL 默认的隔离级别,在同一个事务里,select 的结果是事务开始时时间点的状态,因此,同样的 select 操作读到的结果会是一致的,但是,会有幻读现象。MySQL 的 InnoDB 引擎可以通过 next-key locks 机制(参考下文"行锁的算法"一节)来避免幻读。
SERIALIZABLE(序列化)
在该隔离级别下事务都是串行顺序执行的,MySQL 数据库的 InnoDB 引擎会给读操作隐式加一把读共享锁,从而避免了脏读、不可重读复读和幻读问题。
*/
# 查看全局隔离级别
select @@global.transaction_isolation;
# 查看当前会话的隔离级别
select @@session.transaction_isolation;
# 查看下一个事务的隔离级别
select @@transaction_isolation;
数据库编程
函数
内置函数:也称为系统函数,MySQL提供的函数,无需定义、直接使用即可。
从功能方面划分:大致可以分为数学函数、数据类型转换函数、字符串函数、日期和时间函数、加密函数、系统信息函数、JSON函数以及其他常用函数。
数学函数
分类 |
函数名称 |
描述 |
三角函数 |
PI() |
计算圆周率 |
三角函数 |
RADIANS(x) |
用于将角度x转换为弧度 |
三角函数 |
DEGREES(x) |
用于将弧度x转换为角度 |
三角函数 |
SIN(x) |
正弦函数 |
三角函数 |
COS(x) |
余弦函数 |
三角函数 |
TAN(x) |
正切函数 |
三角函数 |
COT(x) |
余切函数 |
三角函数 |
ASIN(x) |
反正弦函数 |
分类 |
函数名称 |
描述 |
三角函数 |
ACOS(x) |
反余弦函数 |
三角函数 |
ATAN(x) |
反正切函数 |
指数函数 |
SQRT(x) |
求x的平方根 |
指数函数 |
POW(x,y)或POWER(x,y) |
幂运算函数(计算x的y次方) |
指数函数 |
EXP(x) |
计算e(自然对数的底约为2.71828)的x次方 |
对数函数 |
LOG(x) |
计算x的自然对数 |
对数函数 |
LOG10(x) |
计算以10为底的对数 |
求近似值函数 |
ROUND(x,[y]) |
计算离x最近的整数;若设置参数y,与FORMAT(x,y)功能相同 |
分类 |
函数名称 |
描述 |
求近似值函数 |
TRUNCATE(x,y) |
返回小数点后保留y位的x(舍弃多余小数位,不进行四舍五入) |
求近似值函数 |
FORMAT(x,y) |
返回小数点后保留y位的x(进行四舍五入) |
求近似值函数 |
CEIL(x)或CEILING(x) |
返回大于等于x的最小整数 |
求近似值函数 |
FLOOR(x) |
返回小于等于x的最大整数 |
进制函数 |
BIN(x) |
返回x的二进制数 |
进制函数 |
OCT(x) |
返回x的八进制数 |
进制函数 |
HEX(x) |
返回x的十六进制数 |
进制函数 |
ASCII(c) |
返回字符c的ASCII码(ASCII码介于0~255); |
分类 |
函数名称 |
描述 |
进制函数 |
CHAR(c1,c2,c3,…) |
将c1、c2、c3、…的ASCII码转换为字符,然后返回这些字符组成的字符串 |
进制函数 |
CONV(x,code1,code2) |
将code1进制的x变为code2进制数 |
其他函数 |
RAND() |
默认返回[0,1]之间的随机数 |
其他函数 |
ABS(x) |
获取x的绝对值 |
其他函数 |
MOD(x,y) |
求模运算,与x%y的功能相同 |
数据类型转换函数
函数名称 |
描述 |
CONVERT(x,type) |
以type类型返回x |
CONVERT(xUSING字符集) |
以指定字符集返回x数据 |
CAST(xAStype) |
以type类型返回x |
UNHEX(x) |
将x转为十六进制数字,然后再转为由数字表示的字符 |
nCONVERT()和CAST()函数的参数x可以是任何类型的表达式。
n参数type的可选值为BINARAY、CHAR、DATE、DATETIME、DECIMAL、JSON、SIGNED[INTEGER]、TIME、和UNSIGNED[INTEGER]。
字符串函数
函数名称 |
描述 |
CHAR_LENGTH() |
获取字符串的长度 |
LENGTH() |
获取字符串占用的字节数 |
REPEAT() |
重复指定次数的字符串,并保存到一个新字符串中 |
SPACE() |
重复指定次数的空格,并保存到一个新字符串中 |
UPPER() |
将字符串全部转为大写字母,与UCASE()函数等价 |
LOWER() |
将字符串全部转为小写字母,与LCASE()函数等价 |
STRCMP() |
比较两个字符串的大小 |
REVERSE() |
颠倒字符串的顺序 |
函数名称 |
描述 |
SUBSTRING() |
从字符串的指定位置开始获取指定长度的字符串。与MID()函数等价 |
LEFT() |
截取并返回字符串的左侧指定个字符 |
RIGHT() |
截取并返回字符串的右侧指定个字符 |
LPAD() |
按照限定长度从左到右截取字符串,当字符串的长度小于限定长度时在左侧填充指定的字符 |
RPAD() |
按照限定长度从左到右截取字符串,当字符串的长度小于限定长度时在右侧填充指定的字符 |
INSTR() |
返回子串在一个字符串中第一次出现的位置。与LOCATE()和POSITION(…IN…)函数等价,但参数顺序不同。 |
FIND_IN_SET() |
获取子串在含有英文逗号分割的字符串中的开始位置 |
函数名称 |
描述 |
LTRIM() |
删除字符串左侧的空格,并返回删除后的结果 |
RTRIM() |
删除字符串右侧的空格,并返回删除后的结果 |
TRIM() |
删除字符串左右两侧的空格,并返回删除后的结果 |
INSERT() |
从字符串的指定位置开始使用子串替换指定长度的字符串 |
REPLACE() |
使用指定的子串替换字符串中出现的所有指定字符 |
CONCAT() |
将参数连接成一个新字符串 |
CONCAT_WS() |
使用指定分隔符将参数连接成一个新字符串 |
函数 |
截取开始位置 |
限定长度 |
填充字符 |
SUBSTRING() |
自定义 |
自定义 |
不支持 |
LEFT() |
不支持自定义,只能从左侧开始 |
自定义 |
不支持 |
RIGHT() |
不支持自定义,只能从右侧开始 |
自定义 |
不支持 |
LPAD() |
不支持自定义,只能从左侧开始 |
自定义 |
自定义 |
RPAD() |
不支持自定义,只能从左侧开始 |
自定义 |
自定义 |
日期和时间函数
函数名称 |
描述 |
CURDATE() |
用于获取MySQL服务器当前日期,与CURRENT_DATE()等价 |
CURTIME() |
用于获取MySQL服务器当前时间,与CURRENT_TIME()等价 |
NOW() |
用于获取MySQL服务器当前日期和时间,与LOCALTIME()、CURRENT_TIMESTAMP()和LOCALTIMESTAMP()都等价 |
UNIX_TIMESTAMP() |
用于获取MySQL服务器当前UNIX时间戳 |
UNIX_TIMESTAMP(date) |
将指定日期时间date转换为UNIX时间戳并返回 |
DATEDIFF() |
判断两个日期之间的天数差距,参数日期必须使用字符串格式 |
函数名称 |
描述 |
DATE() |
获取日期或日期时间表达式中的日期部分 |
TIME() |
获取指定日期事件表达式中的时间部分 |
WEEK() |
返回指定日期的周数 |
DAYNAME() |
返回日期对应的星期名称(英文全称) |
DAYOFMONTH() |
返回指定日期中的天(1~31),与DAY()等价 |
DAYOFYEAR() |
返回指定日期的天数 |
DAYOFWEEK() |
返回日期对应的星期几(1=周日,2=周一,....7=周六) |
FROM_UNIXTIME() |
将指定的时间戳转成对应的日期时间格式 |
函数名称 |
描述 |
EXTRACT() |
按照指定参数提取日期中的数据 |
DATE_SUB() |
从日期中减去时间值(时间间隔) |
DATE_ADD() |
在指定的日期上添加日期时间 |
MySQL中提供了FROM_UNIXTIME()函数实现自定义格式化后日期的显示样式。
分类 |
格式字符 |
说明 |
年 |
%Y |
4位数字表示的完整年份,如1949、2018 |
年 |
%y |
2位数字表示的年份,如99、03 |
月 |
%m |
两位数字表示的月份,有前导零,返回值00~12 |
月 |
%c |
数字表示的月份,无前导零,返回值0~12 |
月 |
%M |
月份,完整的文本格式,如January、March |
日 |
%d |
月份中的第几天,有前导零,返回值00~31 |
日 |
%e |
月份中的第几天,无前导零,返回值0~31 |
分类 |
格式字符 |
说明 |
时间 |
%h或%I |
小时,12小时格式,有前导零,返回值01~12 |
时间 |
%H |
小时,24小时格式,有前导零,返回值00~23 |
时间 |
%i |
有前导零的分钟数,返回值00~59 |
时间 |
%s或%S |
有前导零的秒数,返回值00~59 |
星期 |
%w |
星期几,返回值0(表示星期日)~6(表示星期六) |
星期 |
%W |
星期几,完整的文本格式,如Sunday、Saturday |
加密函数
加密函数主要用于对数据进行加密。相对明文存储,经过算法计算后的字符串不会被人直接看出保存的是什么数据,在一定程度上能够保证数据的安全性。
散列函数又称为哈希(Hash)函数,用于通过散列算法计算数据的散列值。
函数名称 |
作用 |
MD5() |
使用MD5计算并返回一个32位的字符串 |
AES_ENCRYPT() |
使用密钥对字符串进行加密,默认返回一个128位的二进制数 |
AES_DECRYPT() |
使用密钥对密码进行解密 |
SHA1()或SHA() |
利用安全散列算法SHA-1字符串,返回40个十六进制数字组成的字符串 |
SHA2() |
利用安全散列算法SHA-2字符串 |
ENCODE() |
使用密钥对字符串进行编码,默认返回一个二进制数 |
DECODE() |
使用密钥对密码进行解码 |
PASSWORD() |
计算并返回一个41位的密码字符串 |
nMD5()返回的是32个十六进制数字组成的字符串。
nSHA1()也可称为SHA(),它采用的是160位长度的安全散列算法,返回的是40个十六进制数字组成的字符串。
nSHA2()函数需要通过第2个参数设置采用多少位长度的安全散列算法,它的可选值为224、256、384、512或0(相当于256)。
n当参数为NULL时,MD5()、SHA1()、SHA2()的返回值均为NULL。
•MD5()和SHA()函数经常用于密码的非明文存储,也就是计算正确密码的散列值后保存,然后计算给定密码的散列值,判断两个散列值是否相同。
•对于敏感信息,建议在客户端就考虑使用加密密钥进行加密,在传输时建议尽量采用SSL连接,从多方位的角度尽量保证数据的安全。
系统信息函数
函数名称 |
作用 |
VERSION() |
用于获取当前MySQL服务实例使用的MySQL版本号 |
DATABASE() |
用于获取当前操作的数据库,与SCHEMA()函数等价 |
USER() |
用于获取登录服务器的主机地址及用户名,与SYSTEM_USER()和SESSION_USER()函数等价 |
CURRENT_USER() |
用于获取该账户名允许通过哪些登录主机连接MySQL服务器 |
CONNECTION_ID() |
用于获取当前MySQL服务器的连接ID |
BENCHMARK() |
重复执行一个表达式 |
LAST_INSERT_ID() |
获取当前会话中最后一个插入的AUTO_INCREMENT列的值 |
JSON函数
函数名称 |
作用 |
JSON_ARRAY() |
创建JSON数组 |
JSON_OBJECT() |
创建JSON对象 |
JSON_CONTAINS() |
JSON文档中是否包含路径中指定对象 |
JSON_CONTAINS_PATH() |
JSON文档中是否包含路径中的任意数据 |
JSON_EXTRACT() |
从JSON文档返回数据 |
JSON_KEYS() |
从JSON文档中获取数组中的键 |
JSON_SEARCH() |
获取JSON文档中值的路径 |
函数名称 |
作用 |
JSON_ARRAY_APPEND() |
将数据追加到JSON文档的指定路径中 |
JSON_ARRAY_INSERT() |
将数据插入到JSON数组指定路径前 |
JSON_DEPTH() |
获取JSON文档的最大深度 |
JSON_INSERT() |
将数据插入JSON文档 |
JSON_LENGTH() |
获取JSON文档中元素的数量 |
JSON_MERGE_PATCH() |
合并JSON文档,替换重复键的值 |
JSON_MERGE_PRESERVE() |
合并JSON文档,保留重复的键 |
JSON_PRETTY() |
以友好的格式打印JSON文档 |
函数名称 |
作用 |
JSON_REMOVE() |
从JSON文档中删除数据 |
JSON_REPLACE() |
替换JSON文档中的值 |
JSON_SET() |
向JSON文档中插入数据 |
JSON_TYPE() |
获取JSON值的类型 |
JSON_VALID() |
JSON值是否有效 |
其他函数
# 转换ip地址与数据
select INET_ATON('192.168.1.1');
# 获取uuid
select uuid();
自定义函数
# 防止报错
set global log_bin_trust_function_creators = 1;
# 自定义函数
delimiter $$
create function test1(change_id int, pwd varchar(20)) returns varchar(20)
begin
update test03.student t set t.password=pwd WHERE t.id = change_id;
return concat(change_id, '修改成功');
end;
$$
delimiter ;
# 运行函数
select test1(1, 33333);
#查看函数的创建语句
SHOW create function test1;
#删除函数
DROP FUNCTION IF EXISTS test1;
存储过程
存储过程是数据中的一个重要的对象,它是在大型数据库系统中一组为了完成特定功能的SQL语句集,在第一次使用经过编译后,再次调用就不需要重复编译,因此执行效率比较高。
#创建存储过程pro1
CREATE procedure pro1(in sid INT)
BEGIN
SELECT * from student WHERE id > sid;
END;
#删除存储过程pro1
drop PROCEDURE pro1;
#调用存储过程
CALL pro1(3);
#修改存储过程
# ALTER PROCEDURE
# 查看存储过程的创建语句
SHOW CREATE PROCEDURE pro1;
条件判断
if判断
#2020年05月11日17:36:42
# 编程1班-韦成成
#条件判断
#if判断语句
#在select中的应用
select t.name, if(t.age < 18, '未成年', '成年') 年龄, r.no
from student3 t
left join room r on t.room_id = r.id;
#if在存储过程中的使用
create procedure printNull(in str varchar(255))
begin
if str is null
then
select '输入的变量不能为空';
else
select concat('输入的变量不为空,是:', str);
# end if结束if流程控制
end if;
end;
call printNull('你好');
case then
#条件判断
# case then
select t.name 姓名,
(case
when t.age > 0 and t.age <= 10 then '0-10'
when t.age > 10 and t.age <= 20 then '11-20'
when t.age > 20 and t.age <= 30 then '21-30'
else '>30' end) as 年龄段
from student3 t
left join room r on t.room_id = r.id;
循环
loop循环
# loop循环
# 1-9之间数字的乘积
create procedure proc_loop()
begin
# 定义局部变量i和sum
declare i int default 1;
declare sum int default 1;
# 别名为a的loop循环
a:
loop
if
i > 9 then
leave a;
else
select concat(i, '*', sum, '=', (i * sum));
set i = i + 1;
end if;
end loop a;
end;
call proc_loop();
repeat循环
# repeat循环
# 输出1-10的数字
create procedure proc_repeat()
begin
declare i int default 1;
# repeat 循环
repeat
select i;
set i = i + 1;
# 循环条件,为false的话,执行代码,为true结束,和java相反
until i > 10 end repeat;
end;
call proc_repeat();
while循环
# while循环
# 输出1-10的数字
create procedure proc_while()
begin
# 定义变量i
declare i int default 0;
# 别名为a的循环
a:
while i < 20
do
set i = i + 1;
if i = 5
then
# iterate 相当于continue跳转
iterate a;
elseif i = 9 then
# leave 相当于break结束
leave a;
else
select i;
end if;
end while a;
end;
# 调用存储过程proc_while
call proc_while();
变量
#系统变量
show variables;
show variables like 'auto_inc%';
# 设置临时系统变量
set auto_increment_offset = 5;
show variables like 'auto_increment_offset';
# 会话变量
# 定义session级别的变量@age
select @age := age
from student3
where id = 1;
# 查看变量
select @age;
# 定义session级别的变量@str;
set @str = '你好';
select @str;
# 局部变量
set global log_bin_trust_function_creators = 1;
# 创建testVar函数来测试变量
create function testVar() returns varchar(255)
begin
# 定义局部变量str2
declare str2 varchar(32) default '洛职';
return str2;
end;
select testVar();
游标
create procedure simplecursor3()
begin
declare done boolean default 0; -- 定义一个循环标记默认值为false
declare tmp int ; -- 定义局部变量
declare youbiao3 cursor for select name from student3;
-- 定义游标
-- 当出现02000错误时把局部变量的值设为true
declare continue handler for sqlstate '02000' set done = 1;
open youbiao3;
REPEAT
fetch youbiao3 into tmp;
until done end REPEAT; -- 当done为true时结束repeat,
close youbiao3;
end;
call simplecursor3();
触发器
# 2020年05月19日09:26:29
# 编程1班-韦成成
# 触发器学习
# 创建触发器trigl在删除class数据前触发
# create trigger创建触发器
# BEFORE DELETE在删除前触发
# on student3在student3表
# for each row 每行受影响,触发器都执行,叫行级触发器。
create trigger trig1
before DELETE
on student3
for each row
begin
# 当我进行删除操作的时候,在另外一张表记录
insert into student3_log values (0, '删除了一条数据');
end;
# 查看test04库中的触发器
show triggers in test04;
# 删除触发器
drop trigger trig1;
事件
# 2020年05月20日22:04:42
# 编程1班韦成成
# 查有事件调度器状态
show variables like 'event_scheduler';
# 开启事件调度器
set GLOBAL event_scheduler = ON;
# 定时每隔3秒向表test2中插入数据
create event event_insert_t2
on schedule every 3 second
on completion preserve
do insert into test2(department, time_v) value ('1', now());
# 创建一个10分钟后清空test表数据的事件
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO TRUNCATE TABLE test2;
# 创建一个在2015-04-17 14:42:00时刻清空test表数据的事件
DROP EVENT IF EXISTS event_truncate_test2;
CREATE EVENT event_truncate_test2
ON SCHEDULE
AT TIMESTAMP '2015-04-17 14:42:00'
DO TRUNCATE TABLE test2;
# 5天后开启每天定时3秒向表test2中插入数据,一个月后停止执行
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE EVERY 3 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 5 day
ENDS CURRENT_TIMESTAMP + INTERVAL 1 month
ON COMPLETION PRESERVE
DO INSERT INTO test2(department, time_v)
VALUES ('1', NOW());
# create event event1 on schedule every 3 second on completion PRESERVE do insert into student3_log (log) value (now());
#查看所有事件的相关信息
show events;
#查看事件创建语句
show create event event1;
# 临时关闭事件
alter event event1 disable;
# 删除事件
DROP EVENT IF EXISTS event1;