简洁添加触发器(3种触发器 2种触发阶段)

 

一、添加触发器

DELIMITER $
CREATE TRIGGER 触发器名
 (AFTER (之后)、BEFORE(之前))二选其一
 (增删改(INSERT、DELETE、UPDATE)) ON  表名(这个表名是指触发器在那张表)
FOR EACH ROW
BEGIN
 sql语句(增删改);
end$

 

二、new和old的使用情况

1、下面具体说说old和new的使用情况。在对new赋值的时候只能在触发器before中只用,在after中是不能使用时只能用于取值。

DELIMITER $
CREATE TRIGGER storeUpdate
AFTER 
UPDATE ON store
FOR EACH ROW
BEGIN
UPDATE region SET fk_store_id=NEW.id,fk_store_name=NEW.store_name WHERE fk_store_id = NEW.id;
end$
 

 

DELIMITER $
CREATE TRIGGER regionUpdate
AFTER 
UPDATE ON region
FOR EACH ROW
BEGIN
UPDATE location SET fk_store_id=NEW.fk_store_id,fk_store_name=NEW.fk_store_name,fk_region_id=NEW.id,fk_region_name=NEW.region_name,fk_region_num=NEW.region_num WHERE fk_region_id = NEW.id;
end$

2、old是获取修改前的数据

DELIMITER $
CREATE TRIGGER ${value}_deletes
      AFTER
      DELETE ON ${value}

FOR EACH ROW
BEGIN
      UPDATE mapper
      SET deleted = 1
   WHERE
   fk_file_id = OLD.id;

end$

三、关于修改的触发器,在另一张有个触发器在修改本表,然后本表有写了个修改触发器修改本表数据的情况:

这是另一张表触发本表location的触发sql:

DELIMITER $
CREATE TRIGGER regionUpdate
AFTER 
UPDATE ON region
FOR EACH ROW
BEGIN
UPDATE location SET fk_store_id=NEW.fk_store_id,fk_store_name=NEW.fk_store_name,fk_region_id=NEW.id,fk_region_name=NEW.region_name,fk_region_num=NEW.region_num WHERE fk_region_id = NEW.id;
end$

然后,本表还需在写个触发器时,sql如下:

DELIMITER $
CREATE TRIGGER locationUpdate
AFTER 
UPDATE ON location
FOR EACH ROW
BEGIN
 SET NEW.name=
 concat(OLD.div,'节',OLD.lays,'层');
end$

直接赋值即可。

四、关于触发器种的函数

原来我是这样写的(有问题)

concat(OLD.div,'节')+ concat(OLD.lays,'层');

后来

(concat(OLD.div,'节',OLD.lays,'层') 这句相当于拼接字符串

 

以下是拷贝的别人的:

 

MySQL 数字类型转换函数(concat/cast)

1、将Int 转为varchar经常用 concat函数,比如concat(8,’0′) 得到字符串 ’80′

2、将varchar 转为Int 用 cast(a as signed) a为varchar类型的字符串

3.mysql也支持CONVERT

总结:类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型)
可用的类型
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
cast函数运行示例

mysql> select cast(’125e342.83′ as signed) as clm1, cast(‘foo seo 589′ as signed) as clm2,cast(’3.35′ as signed) as clm3;
+——+——+——+
| clm1 | clm2 | clm3 |
+——+——+——+
|  125 |    0 |    3 |
+——+——+——+
1 row in set, 3 warnings (0.00 sec)

mysql>



CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:  

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值