保持每个数据库的触发器名唯一
4.触发器用CREATE TRIGGER语句创建
例如: create trigger newproduct after insert on products for each row select "Prodcut added";
5.仅支持表: 只有表才支持触发器,视图不支持
6.每个表最多支持6个触发器, 单一触发器不能与多个事件或多个表关联。
7.触发器失败: 如果BEFORE触发器失败,则MySQL将不执行请求的操作。此外,如果BEFORE触发器或语句本身失败,MySQL 将不执行AFTER触发器(如果有的话)。
8.删除触发器:可使用DROP TRIGGER语句 drop trigger newproduct;
9.触发器不能更新或覆盖。为了修改一个触发器,必须先删除它, 然后再重新创建。
10. insert 触发器:
(1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被 插入的行;
(2)在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改 被插入的值);
(3)对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT 执行之后包含新的自动生成值。
11.BEFORE或AFTER? 通常,将BEFORE用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据)。本提示也适用于UPDATE触发器。
12.DELETE触发器:
(1)在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
(2)OLD中的值全都是只读的,不能更新。
例如:
create trigger deleteorder before delete on orders
for each row
begin
insert into archive_orders(order_num, order_date, cust_id)
values (old.order_num, old.order_date, old.cust_id);
end;
解释:在任意订单被删除前将执行此触发器。它使用一条INSERT语句将OLD中的值(要被删除的订单)保存到一个名为archive_ orders的存档表中。
13.多语句触发器:使用BEGIN END块的好处是触发器能容纳多条SQL语句.
14.UPDATE触发器
(1)在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问 以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新 更新的值;
(2)在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改 将要用于UPDATE语句中的值);
(3)OLD中的值全都是只读的,不能更新
例如:
create trigger updateorder before update on vendors
for each row set NEW.vend_state = Upper(NEW.vend_state);
15.触发器的补充
(1)与其他DBMS相比,MySQL 5中支持的触发器相当初级。未来的 MySQL版本中有一些改进和增强触发器支持的计划。
(2)创建触发器可能需要特殊的安全访问权限,但是,触发器的执行 是自动的。如果INSERT、UPDATE或DELETE语句能够执行,则相关 的触发器也能执行。
(3)应该用触发器来保证数据的一致性(大小写、格式等)。在触发器 中执行这种类型的处理的优点是它总是进行这种处理,而且是透 明地进行,与客户机应用无关。
(4)触发器的一种非常有意义的使用是创建审计跟踪。使用触发器, 把更改(如果需要,甚至还有之前和之后的状态)记录到另一个 表非常容易。
(5)遗憾的是,MySQL触发器中不支持CALL语句。这表示不能从触发 器内调用存储过程。所需的存储过程代码需要复制到触发器内。
第二十六章--事务处理
1.事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
2.事务(transaction)指一组SQL语句;
3.回退(rollback)指撤销指定SQL语句的过程;
4.提交(commit)指将未存储的SQL语句结果写入数据库表;
5.保留点(savepoint)指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处理不同)。
6.使用start transaction 标记事务开始;
7.使用ROLLBACK:回退MySQL语句
例如: select * from ordertotals;
start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;
select * from ordertotals;
8.事务处理用来管理INSERT、UPDATE和 DELETE语句。数据可以变更的,查询不用。
9.使用COMMIT
例如:start transaction;
delete from orderitems where order_num=2010;
delete from order where order_num=2010;
commit;
如果第一条DELETE起作用,但第二条失败,则DELETE不会提交
10.隐含事务关闭: 当COMMIT或ROLLBACK语句执行后,事务会自动关闭.
11.使用保留点
savepoint delete1;
每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。为了回退到本例给出的保留点,可如下进行:
rollback to delete1;
保留点越多越好
12.释放保留点: 保留点在事务处理完成(执行一条ROLLBACK或 COMMIT)后自动释放
13.更改默认的提交行为: set autocommint=0;
14.标志为连接专用:autocommit标志是针对每个连接而不是服务器的。