12管矢量控制器:MySQL 触发器

来源:百度文库 编辑:偶看新闻 时间:2024/05/01 01:06:09
MySQL 触发器MySQL 触发器的语法:
CREATE TRIGGER <触发器名称> <--
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <表名称>
FOR EACH ROW
<触发器SQL语句>
规则:
1.触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
2.我们不能给同一张表的同一个事件安排两个触发器
3.FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
4.你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER)。
5.触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样:
   ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE
   DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL
   LOCK OPTIMIZE REPAIR REPLACE REVOKE
   ROLLBACK SAVEPOINT 'SELECT FROM table'
   'SET system variable' 'SET TRANSACTION'
   SHOW 'START TRANSACTION' TRUNCATE UPDATE
6.可以使用NEW与OLD关键字来访问更新前后的数据

用触发器编写加密
aes_encryp加密函数
mysql> delimiter //
mysql> create trigger t_customer_insert before insert on customer
    -> for each row
    -> begin
    -> set NEW.customer_ssn = aes_encrypt(NEW.customer_ssn,'password');
    -> end;
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> insert into customer values (1,'fred','smith','456097234');
Query OK, 1 row affected (0.00 sec)
mysql> select * from customer;

用触发器更新记录字段的长度CHAR_LENGTH()函数
mysql> CREATE TABLE data (name VARCHAR(255));
Query OK, 0 rows affected (0.09 sec)
mysql> CREATE TABLE chars (count INT(10));
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO chars (count) VALUES (0);
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TRIGGER t1 AFTER INSERT ON
data FOR EACH ROW UPDATE chars SET count
= count + CHAR_LENGTH(NEW.name);
Query OK, 0 rows affected (0.01 sec)
相反的
CREATE TRIGGER t2
AFTER delete ON data
FOR EACH ROW
begin
UPDATE chars SET count = count - CHAR_LENGTH(old.name);
end;
//