Mysql数据库存储过程、触发器和计划任务

2021-01-15  本文已影响0人  刘小白DOER

    存储过程Stored Procedur是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行,数据库 SQL 语言层面的代码封装与重用。

    触发器trigger是一种特殊类型的存储过程,它不同于存储过程,主要是通过事件触发 insert,delete, update)而被执行的。

    计划任务,即事件调度器(Event Scheduler),可以用做定时执行某些特定任务,精确到秒。

一、存储过程

1、数据表结构

2、创建存储过程生成1000万行数据,本文是利用phpmyadmin来可视化建立,也可以在命令行输入来建立。

DROP PROCEDURE IF EXISTS proc1;

DELIMITER $$  

SET AUTOCOMMIT = 0$$

CREATE PROCEDURE proc1()

BEGIN

DECLARE v_cnt DECIMAL(10) DEFAULT 0 ;

dd:LOOP  

INSERT INTO card (card_number) VALUES(UUID());

COMMIT;

SET v_cnt = v_cnt+1 ;

IF  v_cnt = 10000000 THEN LEAVE dd;

END IF;

END LOOP dd ;

END;$$

DELIMITER ; 

3、执行call proc1,看电脑性能,笔者使用了3分20秒。

二、触发器

    再建立一个同样结构的表card_old,在删除表card的数据后会将数据插入到表card_old,保存删除的数据。触发器使通过事件触发而被执行的,当对一个表进行操作DML操作( insert,delete, update)时就会激活它执行。可以使用old和new来引用触发器中发生变化的记录内容。

    本文时使用的phpmyadmin来可视化建立触发器,也可以通过使用Navicat for MySQL创建触发器,也可以使用命令行来建立。

create trigger trash

after insert on card for each row

begin

insert into card_old (card_id, card_number) values( old.card_id, old.card_number)

end;

三、计划任务

    mysql schedule可以很灵活地去控制任务,本文是每隔一秒(运行周期可设)插入数据,计划任务可以定时调用存储过程来完成一系列sql集合。

    计划任务需要设置开关才会失效  SET GLOBAL event_scheduler="ON" 。

    命令行创建计划任务:

create event test1

on schedule every 1 day

starts  '2021-01-01 12:00:00'

on completion not preserve

do INSERT INTO card (card_number) VALUES (UUID());

上一篇 下一篇

猜你喜欢

热点阅读