mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间 mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间 ? 转自:http://blog.sina.com.cn/s/blog_6d39ac7e01017sd6.html 注:mysql版本是从5.1开始才支持event的。如果你的版
mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间
? 转自:http://blog.sina.com.cn/s/blog_6d39ac7e01017sd6.html注:mysql版本是从5.1开始才支持event的。如果你的版本低于5.1就先升级版本吧。
查看版本的方法有很多,这里只给大家提供一个????select version();
1.查看是否开启event与开启event。
1.1、MySQL event功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的。
?????????????<span class="Apple-converted-space">?</span>show VARIABLES
?LIKE
?'%sche%'
;
<span>1.2、开启evevt功能</span>
<code>???????????<span class="Apple-converted-space">?</span>SET
?GLOBAL
?event_scheduler = 1;
2.创建定时器的过程
<span>2.1、创建测试表test<br>drop table if exists test;<br>create table test<br>(<br>id int(11) not null auto_increment primary key,<br>time datetime not null<br>) engine=innodb default charset=utf8;</span>
<span>2.2、创建evevt要调用的存储过程test_proce</span>
<span>delimiter //<span><span class="Apple-converted-space">?</span>-- 定义分隔符,必须要有,可以不是//</span><br>drop procedure if exists test_proce;<br>create procedure test_proce()<br>begin<br>insert into test(time) values(now());<br>end//<span>注意看清楚了,这个end后面有你在前面定义的分割符号</span></span>
delimiter //
<span>2.3、开启evevt(要使定时起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1)<br>执行show variables like 'event_scheduler';查看evevt是否开启;<br>若没开启执行set global event_scheduler='on';</span>
<span>2.4、创建事件test_event(其作用:每隔一秒自动调用test_proce()存储过程)<br>drop event if exists test_event;<br>create event test_event<br>on schedule every 1 second<br>on completion preserve disable<br>do call test_proce();<br>2.5、开启事件test_event<br>alter event test_event on completion preserve enable;<br>2.6、关闭事件test_event<br>alter event test_event on completion preserve disable;<br>2.7、查看表test<br>select * from test;</span>
?
<span>3.查看自己创建的event</span>
<span>如果要查看更加详细的信息,你需要root用户的授权,如果是你自己的数据库你可以用下面语句查看</span>
select * from?<span class="Apple-converted-space">?</span>mysql.event;
<br>4.event的时间设置
设置event很简单,但是麻烦的是如何设置执行的时间,网上找了一些,自己总结了一下。
先看语句,如下面这个
<code>????<span class="Apple-converted-space">?</span>CREATE
?EVENT test_event
?ON
?SCHEDULE<span class="Apple-converted-space">?</span><span>EVERY</span><span class="Apple-converted-space">?</span>1
?DAY
?<span>STARTS</span>
?'2012-09-24 00:00:00'
????<span class="Apple-converted-space">?</span>ON
?COMPLETION PRESERVE ENABLE DO CALL test_procedure();
EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year<span>?</span>
<span>从2013年1月13号0点开始,每天运行一次</span>
<span><span>ON</span><span class="Apple-converted-space">?</span><code>SCHEDULE EVERY 1
?DAY
?STARTS
?'2013-01-13 00:00:00'
<span>从现在开始每隔九天定时执行</span>
<span><span>ON</span><span class="Apple-converted-space">?</span><code>SCHEDULE EVERY 9 DAY?STARTS NOW()
?;
<span>每个月的一号凌晨1 点执行</span>
<span>on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);</span>
<span>每个季度一号的凌晨1点执行</span>
<span>on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);</span>
<span>每年1月1号凌晨1点执行</span>
<span>on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);</span>
?
<span>其他的 就大家自由组合了。。</span>
?
?
附录
?
1>使用权限
单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。
当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。
?
查看EVENT命令有如下几种:
?
(1)查询mysql.event表;
(2)通过SHOW EVENTS命令;
(3)通过SHOW FULL EVENTS命令;
(4)通过查询information_schema.events表
(5)SHOW CREATE EVENT。
总之,event的使用频率较低建议使用root用户进行创建和维护。
?
2>CREATE EVENT 的语法
CREATE EVENT
[IF NOT EXISTS] ------------------------------------------------*标注1
event_name -----------------------------------------------------*标注2
ON SCHEDULE schedule -------------------------------------------*标注3?
[ON COMPLETION [NOT] PRESERVE] ---------------------------------*标注4
[ENABLE | DISABLE] ---------------------------------------------*标注5?
[COMMENT 'comment'] --------------------------------------------*标注6?
DO sql_statement ;----------------------------------------------*标注7
?
说明:
标注1:[IF NOT EXISTS]
???????使用IF NOT EXISTS,只有在同名event不存在时才创建,否则忽略。建议不使用以保证event创建成功。
?
标注2:event_name
??????名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。
??????使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。
??????为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:
??????动作名称_(INTO/FROM_)??表名_TIME,例如:
???????????????????????????????????????????????1.每月创建(清空/删除)fans表:?
?????????????????????????????????????????????????????????????????????????create(truncate/drop)_table_fans_month;
???????????????????????????????????????????????2.每天从fans表插入(删除)数据:?
?????????????????????????????????????????????????????????????????????????insert(delete)_into(from)_fans_day;
?
标注3:ON SCHEDULE
???????ON SCHEDULE 计划任务,有两种设定计划任务的方式:
???????1. AT 时间戳,用来完成单次的计划任务。
???????2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。
?
???????在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
???????在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式.
???????时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
???????提示: 其他的时间单位也是合法的如:
?????????QUARTER, WEEK,YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND
??????????????????不建议使用上一行这些不标准的时间单位。
?
标注4: [ON COMPLETION [NOT] PRESERVE]
????????ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
?
标注5:[ENABLE | DISABLE]
???????参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。
?????????可以用如下命令关闭或开启事件:
?????????????????????????????????????ALTER EVENT event_name ?ENABLE/DISABLE
?
标注6:[COMMENT 'comment']
????????注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。
????????'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。
?
标注7: DO sql_statement
????????DO sql_statement字段表示该event需要执行的SQL语句或存储过程。
????????这里的SQL语句可以是复合语句,例如:
???????????????????????????????????????????BEGIN
???????????????????????????????????????????CREATE TABLE test1;//创建表(需要测试一下)
???????????????????????????????????????????DROP TABLE test2;//删除表
???????????????????????????????????????????CALL proc_test1();//调用存储过程
???????????????????????????????????????????END
使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:
??????????????????????????LOCK TABLES
??????????????????????????UNLOCK TABLES
??????????????????????????CREATE EVEN
??????????????????????????ALTER EVENT
??????????????????????????LOAD DATA
?
3>执行逻辑
For (已建立事件each event that has been created)
If (事件的状态非DISABLE)
And (当前时间在ENDS时间之前)
And (当前时间在STARTS时间之后)
And (在上次执行后经过的时间)
And (没有被执行)
Then:
建立一个新的线程
传递事件的SQL语句给新的线程
(该线程在执行完毕后会自动关闭)
?
4>修改事件
?
使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:
ALTER EVENT???event_name
ON SCHEDULE schedule
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
?
5>删除事件
?
EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:
DROP EVENT??[IF EXISTS]??event_name;
?
但当一个事件正在运行中时,删除该事件不会导致事件停止,事件会执行到完毕为止。使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。

MySQL Index Cardinality는 쿼리 성능에 중대한 영향을 미칩니다. 1. 높은 카디널리티 인덱스는 데이터 범위를보다 효과적으로 좁히고 쿼리 효율성을 향상시킬 수 있습니다. 2. 낮은 카디널리티 인덱스는 전체 테이블 스캔으로 이어질 수 있으며 쿼리 성능을 줄일 수 있습니다. 3. 관절 지수에서는 쿼리를 최적화하기 위해 높은 카디널리티 시퀀스를 앞에 놓아야합니다.

MySQL 학습 경로에는 기본 지식, 핵심 개념, 사용 예제 및 최적화 기술이 포함됩니다. 1) 테이블, 행, 열 및 SQL 쿼리와 같은 기본 개념을 이해합니다. 2) MySQL의 정의, 작업 원칙 및 장점을 배우십시오. 3) 인덱스 및 저장 절차와 같은 기본 CRUD 작업 및 고급 사용량을 마스터합니다. 4) 인덱스의 합리적 사용 및 최적화 쿼리와 같은 일반적인 오류 디버깅 및 성능 최적화 제안에 익숙합니다. 이 단계를 통해 MySQL의 사용 및 최적화를 완전히 파악할 수 있습니다.

MySQL의 실제 응용 프로그램에는 기본 데이터베이스 설계 및 복잡한 쿼리 최적화가 포함됩니다. 1) 기본 사용 : 사용자 정보 삽입, 쿼리, 업데이트 및 삭제와 같은 사용자 데이터를 저장하고 관리하는 데 사용됩니다. 2) 고급 사용 : 전자 상거래 플랫폼의 주문 및 재고 관리와 같은 복잡한 비즈니스 로직을 처리합니다. 3) 성능 최적화 : 인덱스, 파티션 테이블 및 쿼리 캐시를 사용하여 합리적으로 성능을 향상시킵니다.

MySQL의 SQL 명령은 DDL, DML, DQL 및 DCL과 같은 범주로 나눌 수 있으며 데이터베이스 및 테이블을 작성, 수정, 삭제, 삽입, 업데이트, 데이터 삭제 및 복잡한 쿼리 작업을 수행하는 데 사용됩니다. 1. 기본 사용에는 CreateTable 생성 테이블, InsertInto 삽입 데이터 및 쿼리 데이터 선택이 포함됩니다. 2. 고급 사용에는 테이블 조인, 하위 쿼리 및 데이터 집계에 대한 GroupBy 조인이 포함됩니다. 3. 구문 검사, 데이터 유형 변환 및 권한 관리를 통해 구문 오류, 데이터 유형 불일치 및 권한 문제와 같은 일반적인 오류를 디버깅 할 수 있습니다. 4. 성능 최적화 제안에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 트랜잭션을 사용하여 데이터 일관성을 보장하는 것이 포함됩니다.

Innodb는 잠금 장치 및 MVCC를 통한 Undolog, 일관성 및 분리를 통해 원자력을 달성하고, Redolog를 통한 지속성을 달성합니다. 1) 원자력 : Undolog를 사용하여 원래 데이터를 기록하여 트랜잭션을 롤백 할 수 있는지 확인하십시오. 2) 일관성 : 행 수준 잠금 및 MVCC를 통한 데이터 일관성을 보장합니다. 3) 격리 : 다중 격리 수준을지지하고 반복적 인 방사선이 기본적으로 사용됩니다. 4) 지속성 : Redolog를 사용하여 수정을 기록하여 데이터가 오랫동안 저장되도록하십시오.

데이터베이스 및 프로그래밍에서 MySQL의 위치는 매우 중요합니다. 다양한 응용 프로그램 시나리오에서 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 웹, 모바일 및 엔터프라이즈 레벨 시스템을 지원하는 효율적인 데이터 저장, 조직 및 검색 기능을 제공합니다. 2) 클라이언트 서버 아키텍처를 사용하고 여러 스토리지 엔진 및 인덱스 최적화를 지원합니다. 3) 기본 사용에는 테이블 작성 및 데이터 삽입이 포함되며 고급 사용에는 다중 테이블 조인 및 복잡한 쿼리가 포함됩니다. 4) SQL 구문 오류 및 성능 문제와 같은 자주 묻는 질문은 설명 명령 및 느린 쿼리 로그를 통해 디버깅 할 수 있습니다. 5) 성능 최적화 방법에는 인덱스의 합리적인 사용, 최적화 된 쿼리 및 캐시 사용이 포함됩니다. 모범 사례에는 거래 사용 및 준비된 체계가 포함됩니다

MySQL은 소규모 및 대기업에 적합합니다. 1) 소기업은 고객 정보 저장과 같은 기본 데이터 관리에 MySQL을 사용할 수 있습니다. 2) 대기업은 MySQL을 사용하여 대규모 데이터 및 복잡한 비즈니스 로직을 처리하여 쿼리 성능 및 트랜잭션 처리를 최적화 할 수 있습니다.

InnoDB는 팬텀 읽기를 차세대 점화 메커니즘을 통해 효과적으로 방지합니다. 1) Next-Keylocking은 Row Lock과 Gap Lock을 결합하여 레코드와 간격을 잠그기 위해 새로운 레코드가 삽입되지 않도록합니다. 2) 실제 응용 분야에서 쿼리를 최적화하고 격리 수준을 조정함으로써 잠금 경쟁을 줄이고 동시성 성능을 향상시킬 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
