直接举例好了
先创建表
create table user (
id int(11) auto_increment,
sex int(1)
primary key(id)
);
create table sexcount (
sex char(10),
count int(11)
)
一张表储存用户信息,一张表统计性别,user表中的sex字段代表用户的性别,1表示男性,0表示女性
插入基本数据
INSERT user values (null, 0), (null, 0), (null, 1), (null, 1);
INSERT sexcount values ('male', 2), ('female', 2);
然后创建触发器,当user表有删除或插入动作的时候会触发触发器
delimiter //
CREATE TRIGGER user_insert BEFORE INSERT ON user
FOR EACH ROW
BEGIN
IF NEW.sex = 1 THEN
UPDATE sexcount SET count=count+1 WHERE sex='male';
ELSEIF NEW.sex=0 THEN
UPDARE sexcount SET count=count+1 WHERE sex='female';
END IF;
END //
delimiter ;
上面的这段代码表示创建一个叫做”user_insert”的触发器,当user表执行了insert动作前,会提前触发user_insert触发器,触发器判断新插入的用户的性别,然后根据性别更新sexcount表中的数据。
接下来再创建一个触发器 user_delete
delimiter //
CREATE TRIGGER user_delete BEFORE DELETE ON user
FOR EACH ROW
BEGIN
IF OLD.sex = 1 THEN
UPDATE sexcount SET count=count-1 WHERE sex='male';
ELSEIF OLD.sex=0 THEN
UPDARE sexcount SET count=count-1 WHERE sex='female';
END IF;
END //
delimiter ;
创建过程基本没差别,值得注意的是,被改变的行的表示方式是不一样的,insert的行用NEW来表示,delete或者update的行用OLD来表示。
还有就是delimiter的运用,因为在创建触发器的过程中需要键入分号,而在MySQL命令行环境中分号是执行一段语句的终止符。delimiter的作用就是重定义结束字符。
然后你可以在user表中插入删除一些数据,看看sexcount表有没有变化。
顺便提醒一下以上所有代码没有经过验证,全部是靠记忆手写出来的,不保证能正确运行,仅供参考。
最好还是去官方的开发文档看看官方开发文档5.7版本