一、添加触发器
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] |