mysql EVENT定时事件

数据库初步学习:

DELIMITER $$


/*创建 A表*/
DROP TABLE IF EXISTS A;  
CREATE  TABLE  A
(
         UserID varchar(32) NOT NULL, 
         PlatformCode char(1) NOT NULL, 
         RegDate TIMESTAMP NOT NULL default 0, 
         LastestActiveTime TIMESTAMP default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
         PushToken varchar(128)
);

/*模拟注册两个用户*/
  INSERT INTO A(UserID ,PlatformCode ,RegDate ,LastestActiveTime,PushToken) VALUES(5,6,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,678910);
  INSERT INTO A(UserID ,PlatformCode ,RegDate ,LastestActiveTime,PushToken) VALUES(1,2,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,123456);


/*创建定时事件 E_INSERT_TEST 模拟一个用户五秒注册一次的定时事件*/ 
  DROP EVENT IF EXISTS E_INSERT_TEST;
 CREATE EVENT E_INSERT_TEST
 ON SCHEDULE EVERY 5 SECOND
 DO
    INSERT INTO A(UserID ,PlatformCode ,RegDate ,LastestActiveTime,PushToken) VALUES(3,4,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,123321);
   
 
 /*创建定时事件 E_TEST 模拟30秒查找假用户并在user_v0200表中删除的定时事件*/  
 DROP EVENT IF EXISTS E_TEST;
 CREATE EVENT E_TEST
 ON SCHEDULE EVERY 30 SECOND
 DO
    BEGIN
 
   /*创建临时表 tmp_stoken_user */
 DROP TABLE  IF EXISTS tmp_stoken_user;
 CREATE   TABLE  tmp_stoken_user(
  RegDate TIMESTAMP,
  PushToken VARCHAR(256),
  count INT
  );
  
 DROP TABLE IF EXISTS tmp_fake_users;
 CREATE   TABLE tmp_fake_users(
  UserID VARCHAR(32),
  PlatformCode VARCHAR(256));
   /* 把多余的Fake用户存入*/
 
 INSERT INTO tmp_stoken_user(RegDate, PushToken, count) SELECT
        max(RegDate), PushToken, count(*) AS ct FROM A 
     WHERE PushToken <> '' GROUP BY PushToken HAVING ct> 1;
  
    INSERT INTO tmp_fake_users(UserID, PlatformCode)
  SELECT UserID, PlatformCode FROM A 
  WHERE EXISTS(SELECT 1 FROM  tmp_stoken_user
         WHERE user_v0200.PushToken=tmp_stoken_user.PushToken AND
               user_v0200.RegDate <> tmp_stoken_user.RegDate);
 
 /* 构造返回记录集 */
 SELECT * FROM tmp_fake_users;

 /* 直接把A中的假用户删除 */
 DELETE FROM A WHERE EXISTS(
  SELECT 1 FROM tmp_fake_users
        WHERE A.UserID = tmp_fake_users.UserID AND
        A.PlatformCode = tmp_fake_users.PlatformCode);
       
 END

$$
DELIMITER ;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值