为什么Event的代码只能写在OnGUI中

mysql中event的用法详解
转载 & & 作者:
本篇文章是对mysql中event的用法进行了详细的分析介绍,需要的朋友参考下
一、基本概念mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程。
二、适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理。例如:使用event在每月的1日凌晨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用户进行创建和维护。
四、基本语法
4.1 开启定时器要使event起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1。-- 查看是否开启定时器 代码如下:SHOW VARIABLES LIKE 'event_scheduler';-- 开启定时器 0:off 1:on
代码如下:SET GLOBAL event_scheduler = 1; 当你设定事件计划为0 或OFF,即关闭事件计划进程的时候,不会有新的事件执行,但现有的正在运行的事件会执行到完毕对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。请特别注意!
4.2 创建事件CREATE EVENT 的语法如下:CREATE EVENT[IF NOT EXISTS] ---------------------------------------------*标注1event_name -----------------------------------------------------*标注2ON 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语句可以是复合语句,例如:BEGINCREATE TABLE test1;//创建表(需要测试一下)DROP TABLE test2;//删除表CALL proc_test1();//调用存储过程END使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:LOCK TABLESUNLOCK TABLESCREATE EVENTALTER EVENTLOAD DATA
4.3& 执行逻辑For (已建立事件each event that has been created)If (事件的状态非DISABLE)And (当前时间在ENDS时间之前)And (当前时间在STARTS时间之后)And (在上次执行后经过的时间)And (没有被执行)Then:建立一个新的线程传递事件的SQL语句给新的线程(该线程在执行完毕后会自动关闭)4.4 修改事件使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:ALTER EVENTevent_nameON SCHEDULE schedule[RENAME TO new_event_name][ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE][COMMENT 'comment']DO sql_statement&4.5 删除事件EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:DROP EVENT[IF EXISTS]event_name&但当一个事件正在运行中时,删除该事件不会导致事件停止,事件会执行到完毕为止。使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。五、常用实例每隔一秒自动调用e_test()存储过程 代码如下:CREATE EVENT IF NOT EXISTS e_testON SCHEDULE EVERY 1 SECONDON COMPLETION PRESERVEDO CALL e_test();每个月的一号凌晨1 点执行STAT()存储过程: 代码如下:CREATE& EVENT& NOT EXISTS& STATON& SCHEDULE& EVERY& 1& MONTH& STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)ON& COMPLETION& PRESERVE& ENABLEDOBEGINCALL STAT();END
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具工具修订记录最近更改媒体管理器网站地图登录注册&
UnityEngine
UnityEngine.SceneManagement
场景管理类
script:unityengine:classes:event:event
Event 事件
class in UnityEngine
Description 描述
A UnityGUI event.
UnityGUI的事件。
Events correspond to user input (key presses, mouse actions), or are UnityGUI layout or rendering events.
对应于用户输入事件(按键,鼠标行为),或是UnityGUI布局界面,或渲染事件。
For each event
is c so OnGUI is potentially called multiple times per frame.
corresponds to “current” event inside OnGUI call.
对于每个事件在脚本OnGUI中被调用;OnGUI潜在每帧被多次调用。Event.current对应于在OnGUI里调用当前事件。
See Also: .
Static Variables 静态变量
The current event that's being processed right now.
目前正在处理的事件。
Variables 变量
Is Alt/Option key held down? (Read Only)
Alt或Option键按住了么(只读)?
Which mouse button was pressed.
哪个鼠标按键被按下。
Is Caps Lock on? (Read Only)
Caps Lock键打开了么(只读)?
The character typed.
字符类型;就是键盘键入的对应的字符。
How many consecutive mouse clicks have we received.
我们收到的鼠标连续点击多少次。
Is Command/Windows key held down? (Read Only)
Command/Windows键被按住了么(只读)?
The name of an ExecuteCommand or ValidateCommand Event.
ExecuteCommand或ValidateCommand事件的名字。
Is Control key held down? (Read Only)
Ctrl键被按住了么(只读)?
The relative movement of the mouse compared to last event.
相对于上次事件,鼠标的相对移动。
Index of display that the event belongs to.
该事件所属的显示器索引。
Is the current keypress a function key? (Read Only)
当前按下一个功能键?(只读)
Is this event a keyboard event? (Read Only)
这个事件是键盘事件么(只读)?
Is this event a mouse event? (Read Only)
这个事件是鼠标事件么(只读)?
The raw key code for keyboard events.
用于键盘事件的原始键码。
Which modifier keys are held down.
哪一个修改键被按住。比如,Ctrl,Alt,Shift等
The mouse position.
鼠标的位置。
Is the current keypress on the numeric keyboard? (Read Only)
当前按键是数字键么(只读)?
Is Shift held down? (Read Only)
Shift键按住了么(只读)?
The type of event.
事件的类型。
Public Functions 共有函数
Get a filtered event type for a given control ID.
获取一个给定controlID的事件类型。
Use this event.
使用这个事件。
Static Functions 静态函数
Returns the current number of events that are stored in the event queue.
返回储存在当前事件队列中的事件数量。
Create a keyboard event.
创建一个键盘事件。
Get the next queued [Event] from the event system.
从事件系统获取下个队列的事件。为什么Event的代码只能写在OnGUI中_百度知道
为什么Event的代码只能写在OnGUI中
我有更好的答案
```if (e.stopPropagation) {&#47.cancelBubble = true? e.stopPropagation() : 从【外层】节点往 点击的元素 传播/&#47:
非IE中: e 就是有值的.stopPropagation()
e、即时编辑 带来一些麻烦
阻止冒泡,所以,可以取到 IE 中的事件对象e = e || window.事件流:
事件冒泡.cancelBubble=true);事件冒泡会给
下拉菜单,往【外层】节点传播
事件捕获: (e;/ 处理 IE 和 非IE之间的兼容问题///
IE 中; 阻止事件冒泡e.stopPropagation : 从点击的元素开始.event:
e就是undefined,整体的值就是window,整体的值就是 e,所以取到这个事件对象&#47//chrome
e.stopPropagation();} else {&#47
采纳率:44%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Unity3d中默认函数调用顺序(MonoBehaviour)
题目写得有点不准确了,不过大家看得懂就好。
首先要明确的是MonoBehaviour是每个脚本的基类.每个Javascript脚本自动继承MonoBehaviour.使用C#或Boo时,需要显式继承MonoBehaviour.
以下是一些常用的函数调用顺序的说明:
Awake:当一个脚本实例被载入时Awake被调用,要先于Start。建议少用,此刻物体可能还没有实例化出来,会影响程序执行顺序。需要注意的是,假设实例化一个物件:
GameObject go = new
GameObject();
go.GetComponent().Test();
这个Test()的调用顺序会在Awake()之后,在Start()之前
Start:Start仅在Update函数第一次被调用前调用。物体实例化完成后调用(估计,没确认)。
Update:当MonoBehaviour启用时,其Update在每一帧被调用
FixedUpdate:这个函数会在每个固定的物理时间片被调用一次.这是放置游戏基本物理行为代码的地方。UPDATE之后调用。
Reset:Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用.此函数只在编辑模式下被调用.Reset最常用于在检视面板中给定一个最常用的默认值.
OnDestory:物体被删除时调用。
OnEnable:物体启用时被调用。
OnDisable:物体被禁用时调用。
OnGui:这个函数会每帧调用好几次(每个事件一次),GUI显示函数只能在OnGui中调用。备注:这个各大翻译都直接翻译成每帧调用一次了。下面是官方的原文。
OnGui:This means that your OnGUI implementation might be
called several times per frame (one call per event). For more
information on GUI events see the Event reference. If the
MonoBehaviour's enabled property is set to false, OnGUI() will not
be called.
更详细的请看这里:
http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.html
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

 

随机推荐