欢迎投稿

今日深度:

MySQL触发器 trigger学习,mysql触发器trigger

MySQL触发器 trigger学习,mysql触发器trigger


触发器:一类特殊的事物,可监视某种数据操作,并触发相关操作(insert/update/delete);表中的某些数据改变,希望同时可以引起其它相关数据改变的需求。 作用:变化自动完成某些语句查询,添加程序的灵活性。 创建触发器语法: #delimiter $$  //默认情况下,delimiter是分号“;”,sql语句带有;号结尾会报错,没到end就算到结束了,使用delimiter $$作用就是告诉mysql语句的结尾换成以$结束,相应使用end$$结束
create trigger test1  #触发器名称
(after/before) #触发时间
(insert/update/delete)  #监视事件
on table #监视地点(表名)
for each row  #mysql必须加的 
begin
    sql1
    ...
    sqlN
end;
#end$$
查询已有trigger:show triggers 删除已有trigger:drop trigger 触发器名称 new/old: update触发:old 代表更新前的记录。new 代表更新后的记录. insert触发:old 不能使用。new 代表插入的记录. delete触发:old 代表删除的记录。new 不能使用.
实例操作: goods商品表和ord订单表
CREATE TABLE goods(
`goods_id` INT(10),
`name` VARCHAR(20),
`num` SMALLINT(4)
)ENGINE=INNODB CHARSET=utf8
CREATE TABLE `ord`(
`oid` INT(10),
`gid` INT(10),
`much` INT(10)
)ENGINE=INNODB CHARSET=utf8
INSERT INTO goods VALUES
(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);
1、要求每下一个订单,goods表中的库存相应减少订单的数量。 mysql> select * from goods +----------+------+------+ | goods_id | name | num | +----------+------+------+ | 1 | cat | 26 | | 2 | dog | 26 | | 3 | pig | 26 | +----------+------+------+ 3 rows in set (0.00 sec) mysql> select * from ord; Empty set (0.00 sec)
#创建触发器test1
DELIMITER $$
CREATE TRIGGER test1
AFTER
INSERT
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
END$$

mysql> CREATE TRIGGER test1     -> AFTER     -> INSERT     -> ON `ord`     -> FOR EACH ROW     -> BEGIN     -> UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;     -> END$$ Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO `ord` VALUES (1, 2, 2)$$ Query OK, 1 row affected (0.03 sec) mysql> select * from ord$$ +------+------+------+ | oid | gid | much | +------+------+------+ | 1 | 2 | 2 | +------+------+------+ 1 row in set (0.00 sec) mysql> select * from goods$$ +----------+------+------+ | goods_id | name | num | +----------+------+------+ | 1 | cat | 26 | | 2 | dog | 24 | | 3 | pig | 26 | +----------+------+------+ 3 rows in set (0.00 sec) goods表里面的dog由26变成24
2、用户取消订单后商品库存订单的商品数要正常入库。以下只写触发器trigger,操作过程不写太多比较乱。
#触发器test2
CREATE TRIGGER test2
AFTER
DELETE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much WHERE goods_id = old.gid;
END $$ 

3、用户更新订单的时候,商品库存要根据订单的数量正常更新。
#触发器test3
CREATE TRIGGER test3
AFTER
UPDATE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much - new.much WHERE goods_id = new.gid;
END$$


查询触发器
删除触发器



怎在mysql中运行触发器(trigger)?

触发器,不是调用的,是触发的。
你的触发器是针对password表的,在执行修改后触发。
那你就修改password表的数据列price就可以了。
 

MYSQL 触发器语法的一个问题

在命令行下没有用分隔符delimiter 是创建不了触发器的。
delimiter $create trigger insertAfterDeleteafter t_order on insertfor each rowbeginupdate goods set goods_count = goods_count - new.order_count where goods_id = new.goods_id;end;$www.cnblogs.com/...3.html

 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4157.html NewsArticle MySQL触发器 trigger学习,mysql触发器trigger 触发器: 一类特殊的事物,可监视某种数据操作,并触发相关操作(insert/update/delete); 表中的某些数据改变,希望同时可以引起其它相关数据...
评论暂时关闭