关于mysql存储过程的例子,和解释说明(create历史表table_日期,向历史《history_table》表中插入数据insert,清理原来的表(table)delete)

DELIMITER $$

USE `gps_hisdata`$$       
/* 选择一个数据库 */

DROP PROCEDURE IF EXISTS `adasalarm_test`$$
/* 存储过程的名称类似:java中的函数 */

CREATE DEFINER=`root`@`localhost` PROCEDURE `adasalarm_test`()
/* 创建存储过程的名称 */

BEGIN
 /* 开始 */
 
DECLARE `@suffix` VARCHAR(15);
/*声明一个变量@suffix */
DECLARE `@sqlstr` VARCHAR(255);

DECLARE `@current` VARCHAR(100);

DECLARE `@sqlinsert` VARCHAR(100);

DECLARE `@someday` VARCHAR(100);


SET `@suffix`  =  DATE_FORMAT(NOW(),'%Y_%m_%d');
/*赋值一个变量@suffix ,(就是将当天的时间赋值给@suffix)*/
SET `@current` =  DATE_FORMAT(NOW(),'%Y-%m-%d');
SET `@someday` =  DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 2 DAY),'%Y-%m-%d');

/*下面的赋值一个变量@sqlstr ,(相对比较复杂,用到拼接字符串api:concat(str1,str2,...))*/
SET @sqlstr = CONCAT(
"CREATE TABLE adasalarm",
`@suffix`,
"(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `alarmId` INT(11) NOT NULL,
  `alarmNo` VARCHAR(32) NOT NULL,
  `alarmSource` VARCHAR(255) DEFAULT NULL,
  `alarmStatus` INT(11) NOT NULL,
  `alarmTime` DATETIME NOT NULL,
  `alarmType` VARCHAR(255) DEFAULT NULL,
  `altitude` INT(11) NOT NULL,
  `attachmentCount` INT(11) NOT NULL,
  `deviateType` INT(11) NOT NULL,
  `fatigueDegree` INT(11) NOT NULL,
  `frontCarDistance` INT(11) NOT NULL,
  `frontCarSpeed` INT(11) NOT NULL,
  `gpsTime` DATETIME DEFAULT NULL,
  `latitude` DOUBLE NOT NULL,
  `level` INT(11) NOT NULL,
  `longitude` DOUBLE NOT NULL,
  `roadRecognitionData` INT(11) NOT NULL,
  `roadRecognitionMark` INT(11) NOT NULL,
  `sn` INT(11) NOT NULL,
  `speed` INT(11) NOT NULL,
  `terminalId` VARCHAR(255) DEFAULT NULL,
  `tirePressureAlarmDetail` VARCHAR(255) DEFAULT NULL,
  `vehicleStatus` INT(11) NOT NULL,
  `createDate` DATETIME DEFAULT NULL,
  `plateNo` VARCHAR(255) DEFAULT NULL,
  `vehicleId` BIGINT(20) NOT NULL,
  `location` VARCHAR(255) DEFAULT NULL,
  `simNo` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`id`,`alarmTime`),
  KEY `alarmNo` (`alarmNo`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;"
);

/* prepare :准备一个存储过程,从一个变量 */
PREPARE createDateTable FROM @sqlstr;
EXECUTE createDateTable;
/* 执行这个存储过程 */
/*
事实上:
创建表:需要:
(1)声明变量,《后面的赋值需要用到》
(2)给前面声明的变量赋值,
(3)准备存储过程,然后执行。
*/
SET @sqlinsert = CONCAT(
"INSERT INTO adasalarm",
`@suffix`,
" select * from adasalarm  where createDate < ","'",`@current`,"'",";"
);
PREPARE insterDatabase FROM @sqlinsert;
EXECUTE insterDatabase;
/*
事实上:
向创建的表中插入数据:
(1)需要向一个声明的变量:赋值(这里就是可执行的sql语句)用到concat(str1,str2,str3,...)
(2)执行这个插入语句
*/
SET @sqldelete =CONCAT(
"delete from adasalarm  where createDate < ",
"'",`@someday`,"'",";"
);
PREPARE deleteTable FROM @sqldelete;
EXECUTE deleteTable;
/*
事实上:
清理原来表中的数据:
(1)需要向一个声明的变量:赋值(这里就是可执行的sql语句)用到concat(str1,str2,str3,...)
(2)执行这个插入语句
*/

END$$

DELIMITER ;

下面是定时任务。也就是:事件(负责存储过程《类似于java中的函数》的执行的频率)

DELIMITER $$

-- SET GLOBAL event_scheduler = ON$$     -- required for event to execute but not create    

CREATE	/*[DEFINER = { user | CURRENT_USER }]*/	EVENT `gps_hisdata`.`adasalarm_event`

ON SCHEDULE EVERY 7 DAY
  
STARTS '2020-10-11 02:59:59'
	   /*执行的频率其实效果:周日的2点59分59秒执行一次*/
	 
DO
	BEGIN

	      CALL adasalarm_use();
	    /*执行这个存储过程*/
	END$$

DELIMITER ;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值