今天想用mysql的触发器来实现对原来数据表拼音字段的扩展,写法是:
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
|
DELIMITER ;
一看就能看懂,但是发现mysql触发器有几个弱点,
1,mysql4是没有触发器的
2,触发器不能对本表操作(这个不是缺点,是出于数据安全方面的考虑吧)
看来不得不放弃mysql trigger来出来老数据表的拼音问题了。
接下来写一个delete的例子:
首先要注意一点,在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: "NEW . column_name"或者"OLD . column_name".
一个我写的delete的例子,用来保存delete后的数据:
DELIMITER $$;
DROP TRIGGER `gbk`.`RECORDDELETE`$$
CREATE TRIGGER `gbk`.`RECORDDELETE` AFTER DELETE on `gbk`.`articles`
FOR EACH ROW BEGIN
DECLARE d_md5 CHAR(32);
SET d_md5 = MD5(CONCAT(OLD.id, '-singer'));
INSERT INTO `gbk`.`delete_record` (`md5`, `key`, `table`, `id`) VALUES (d_md5, OLD.title, 'singer', OLD.id);
END$$
DELIMITER ;$$
希望能提供一个参考