mysql5资源共享

 找回密码
 立即注册
查看: 26|回复: 0

[MS-SQL Server] 【基础】MYSQL的触发器

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2019-7-16 11:06:08 | 显示全部楼层 |阅读模式
mysql触发器

创建触发器

CREATETRIGGERtrigger_nametrigger_time
trigger_eventONtb_nameFOREACHROWtrigger_stmt

trigger_name:--触发器的名称
trigger_time:--触发时间:为BEFORE或者AFTER
trigger_event:--触发事件,为INSERT,DELETE或者update
tb_name:--表示建立触发器的表明,就是在哪张表上建立触发器:
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句所以可以说mysql创建以下六种触发器:

BEFOREINSERT,BEFOREDELETE,BFFOREUPDATE
AFTERINSERT,AFTERDELETE,AFTERUPDATE


--BEFORE在..之前
--AFTER在..之后
--BEGIN开始end结束

CREATETRIGGER触发器名BEFORE|AFTER触发事件
ON表名FOREACHROW
BEGIN
执行语句列表
END



--ips:一般情况下,mysql默认是以;作为结束执行语句,与触发器中需要的分行起冲突

--  为解决此问题可用DELIMITER,如:DELIMITER||,可以将结束符号变成||

--  当触发器创建完成后,可以用DELIMITER;来将结束符号变成;


DELIMITER||
CREATETRIGGERdemoBEFOREDELETE
ONusersFOREACHROW
BEGIN
INSERTINTOlogsVALUES(NOW());
INSERTINTOlogsVALUES(NOW());
END
||
DELIMITER;

--DELIMITER分界符



--触发器类型激活触发器的语句
INSERT型触发器INSERT,LOADDATA,REPLACE
UPDATE型触发器UPDATE
DELETE型触发器DELETE,REPLACE


--loaddata语句是将文件的内容插入到表中,相当于是insert语句,而replace语句在一般的情况下和insert差不多,但是如果表中存在primary或者unique索引的时候,如果插入的数据和原来的primarykey或者unique相同的时候,会删除原来的数据,然后增加一条新的数据,所以有的时候执行一条replace语句相当于执行了一条delete和insert语句。



DELIMITER$#将语句的分隔符改为$
BEGIN
sql1;
sql2;
...
sqln
END$
DELIMITER;#将语句的分隔符改回原来的分号";"



DECLAREvar_namevar_type[DEFAULTvalue]#定义变量,可指定默认值
setvar_name=value#给变量赋值


#DELIMITER



#DELIMITER$
CREATETRIGGERuser_logAFTERINSERTONusersFOREACHROW
BEGIN
DECLAREs1VARCHAR(40)charactersetutf8;
DECLAREs2VARCHAR(20)charactersetutf8;
SETs2="iscreated";
SETs1=CONCAT(NEW.name,s2);#函数CONCAT可以将字符串连接
INSERTINTOlogs(log)values(s1);
END#$
#DELIMITER;


CREATETABLE'logs'(
'id'int(11)NOTNULLAUTO_INCREMENT,
'LOG'VARCHAR(255)defaultnullcimment'日志说明',
PRIMARYKEY('ID')
)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-12-13 15:38 , Processed in 0.045785 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表