MySQL Trigger

trigger 是一个触发器,用于在新增、修改和删除数据的时候做一些额外的操作。

  • 全局惟一,所有建的trigger不能重名
  • 不能对TEMPORARY表进行操作
  • 必须与表进行绑定,不能操作视图
  • 由于是针对于每一行的,所以请慎用

使用

-- 建表
DROP TABLE IF EXISTS `PERSON`;
CREATE TABLE `PERSON`(
  `ID`     INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NAME`   VARCHAR(64) DEFAULT NULL COMMENT '姓名',
  `AGE`    INT(10)     DEFAULT NULL COMMENT '年龄',
  `REMARK` VARCHAR(64) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`ID`)
) ENGINE = INNODB AUTO_INCREMENT = 101 DEFAULT CHARSET = UTF8;
-- create trigger
CREATE TRIGGER TRIGGER_PERSON BEFORE INSERT ON PERSON
  FOR EACH ROW
BEGIN
  IF NEW.AGE < 10 THEN
    SET NEW.REMARK = '儿童';
  ELSEIF NEW.AGE > 10 AND NEW.AGE < 18 THEN
    SET NEW.REMARK = '未成年';
  ELSEIF NEW.AGE > 18 THEN
    SET NEW.REMARK = '成年人';
  END IF;
END;
-- test
INSERT INTO PERSON(NAME, AGE, REMARK) VALUES ('小锦', 9, '');
INSERT INTO PERSON(NAME, AGE, REMARK) VALUES ('小明', 10, '');
INSERT INTO PERSON(NAME, AGE, REMARK) VALUES ('小兰', 12, '');
INSERT INTO PERSON(NAME, AGE, REMARK) VALUES ('小黄', 18, '');
INSERT INTO PERSON(NAME, AGE, REMARK) VALUES ('小芳', 20, '');

101	小锦	9	儿童
102	小明	10	""
103	小兰	12	未成年
104	小黄	18	""
105	小芳	20	成年人

其他

  • 新增与修改的trigger trigger语法

  • 查看所有的triggers

SELECT * FROM information_schema.TRIGGERS;
  • 查看triggers
SHOW TRIGGERS ;