MySQL 触发器
程序员文章站
2022-05-07 14:14:03
...
触发器的作用是在增、删、改操作之前(或之后)自动调用的SQL语句或存储过程。比如为了保持数据的一致性,删除订单记录时,触发删除订单详细记录。
1. 创建触发器:
注:一个触发器只能定义一个操作,如BEFORE INSERT, AFTER UPDATE等。
如Account表:
例1:往表account插入记录,balance小于0时改为0
例2:往表account插入记录,balance小于0时,触发异常
2. 查询触发器:
3. 删除触发器:
1. 创建触发器:
DELIMITER $$ -- 结束符改为$$ CREATE TRIGGER trigger_name BEFORE|AFTER INSERT|UPDATE|DELETE ON table_name [FOR EACH ROW] BEGIN commands; END$$ DELIMITER ; -- 结束符改回;
注:一个触发器只能定义一个操作,如BEFORE INSERT, AFTER UPDATE等。
如Account表:
CREATE TABLE ACCOUNT ( USERNAME VARCHAR(50) NOT NULL, BALANCE INT NOT NULL, PRIMARY KEY (USERNAME), CHECK (BALANCE >= 0) -- analyzed but ignored by MySQL );
例1:往表account插入记录,balance小于0时改为0
DELIMITER $$ CREATE TRIGGER account_beforeInsert BEFORE INSERT ON account FOR EACH ROW BEGIN IF NEW.balance < 0 THEN -- NEW代表新的记录 SET NEW.balance = 0; END IF; END$$
例2:往表account插入记录,balance小于0时,触发异常
DELIMITER $$ CREATE TRIGGER account_beforeInsert BEFORE INSERT ON account FOR EACH ROW BEGIN IF NEW.balance < 0 THEN CALL xxx_yyy(); UPDATE _xxx_yyy SET X = 1; -- 通过调用不存在的存储过程或执行时报错的SQL来引发异常,名称尽量复杂,防止和已有或新建的表或存储过程重名。 END IF; END$$
2. 查询触发器:
SHOW TRIGGERS;
3. 删除触发器:
DROP TRIGGER [database_name.]trigger_name
上一篇: oracle的触发器执行插入
下一篇: mysql存储过程