Mysql 事件、密码修改及命令行下创建存储过程

创建函数


-- ----------------------------
-- Procedure structure for cleanProc
-- ----------------------------
DROP PROCEDURE IF EXISTS `cleanProc`;
delimiter ;;
CREATE PROCEDURE `cleanProc`()
BEGIN
	
	delete from T_TARGET_FILE  where (TO_DAYS(NOW()) - TO_DAYS(RECEIVE_TIME))>3; 
	delete from T_RECV_LOG  where (TO_DAYS(NOW()) - TO_DAYS(RECEIVE_TIME))>3; 

END
;;
delimiter ;

创建事件

-- ----------------------------
-- Event structure for cleanEvent
-- ----------------------------
DROP EVENT IF EXISTS `cleanEvent`;
delimiter ;;
CREATE EVENT `cleanEvent`
ON SCHEDULE
EVERY '1' DAY STARTS '2019-08-24 08:00:00'
ON COMPLETION PRESERVE
DO call cleanProc()
;;
delimiter ;

SET FOREIGN_KEY_CHECKS = 1;

删除事件

drop event   cleanEvent

查看事件

 show events
show variables like 'event_scheduler';

select @@event_scheduler;

查看存储过程

show create procedure cleanProc

启动事件

set global event_scheduler = on;

存储过程查询

SELECT SPECIFIC_NAME,SECURITY_TYPE,SQL_DATA_ACCESS FROM information_schema.ROUTINES where ROUTINE_NAME='cleanProc';
SELECT * FROM information_schema.ROUTINES where ROUTINE_NAME='cleanProc';

存储过程删除

DROP PROCEDURE cleanProc ;

存储过程调用

call cleanProc()

命令行下创建存储过程

存储过程想修改一下,网上兜兜转转找起来修改没改太明白,如果仍有修改需要请自行百度,我用了一种笨方法,就是先删除再增加,有图形管理客户端搞起来比较容易,但是如果通过mysql命令行进行进行修改,便遇到了一头雾水,因为存储过程里写了两条SQL,每条SQL后面都用;分隔了,估计是与mysql命令行执行的分号有冲突,所以一直报错。后来百度了下,找到了修改的方法:
步骤:1先修改mysql语句执行的分隔符 2持行存储过程,具体来看下图吧:

 修改mysql 语句持行分隔符: DELIMITER //

在这里插入图片描述

创建存储过程:
CREATE DEFINER=`back_aqjk`@`%` PROCEDURE `cleanProc`()
BEGIN
	
	delete from T_TARGET_FILE  where (TO_DAYS(NOW()) - TO_DAYS(RECEIVE_TIME))>3; 
	delete from T_RECV_LOG  where (TO_DAYS(NOW()) - TO_DAYS(RECEIVE_TIME))>3; 

END

Mysql 事件、密码修改及命令行下创建存储过程_第1张图片

密码修改(转载)

方法1: 用SET PASSWORD命令 
首先登录MySQL。 
格式:mysql> set password for 用户名@localhost = password('新密码'); 
例子:mysql> set password for root@localhost = password('123'); 

方法2:用mysqladmin 
格式:mysqladmin -u用户名 -p旧密码 password 新密码 
例子:mysqladmin -uroot -p123456 password 123 

方法3:用UPDATE直接编辑user表 
首先登录MySQL。 
mysql> use mysql; 
mysql> update user set password=password('123') where user='root' and host='localhost'; 
mysql> flush privileges; 

方法4:在忘记root密码的时候,可以这样 
以windows为例: 
1. 关闭正在运行的MySQL服务。 
2. 打开DOS窗口,转到mysql\bin目录。 
3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 
4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。 
5. 输入mysql回车,如果成功,将出现MySQL提示符 >。 
6. 连接权限数据库: use mysql; 。 
6. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。 
7. 刷新权限(必须步骤):flush privileges; 。 
8. 退出 quit。 

9. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

说明:新安装的MySQL5.7,输入UPDATE user SET password=PASSWORD("123456") WHERE user='root';时 提示ERROR 1054 (42S22): Unknown column 'password' in 'field list',原来是mysql数据库下已经没有password这个字段了,password字段改成了authentication_string,所以 UPDATE user SET authentication_string=PASSWORD("123456") WHERE user='root';即可

方法5:alter user 'root'@'localhost' identified by '123456'; 这种方式适用于高版本更改成功后需要重启mysql服务

原文:https://blog.csdn.net/zht741322694/article/details/82462552 

创建唯一索引

ALTER TABLE `test`.`T_TARGET_FILE` 
ADD UNIQUE INDEX `mineCode_fileType_fileTime`(`COAL_MINE_ID`, `FILE_TYPE`, `FILE_TIME`) USING BTREE;

创建重复数据并且只留一条

DELETE FROM T_TARGET_FILE WHERE ID IN 
	(SELECT M.ID FROM 
		(SELECT MIN(ID)AS ID FROM T_TARGE GROUP BY COAL_MINE_ID,FILE_TYPE,FILE_TIME HAVING COUNT(1)>1)  M 
    )
  • 注 :如果不加一层select M.ID from m,则会报错:ERROR 1093 (HY000): You can’t specify target table ‘T_TARGET_FILE’ for update in FROM clause
    意思是不能直接在同一表中即查询又删除,需要增加一个中间表进行操作

你可能感兴趣的:(技术相关)