MySQL必知必会--第二十四章

第二十四章--使用触发器
1.触发器:是MySQL响应如下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):insert, update, delete.
2.建立触发器:
    (1)惟一的触发器名;
    (2)触发器关联的表;
    (3)触发器应该响应的活动(DELETE、INSERT或UPDATE); 
    (4)触发器什么时候执行(处理以前或以后)。数据库

3.保持每一个数据库的触发器名惟一
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标志是针对每一个链接而不是服务器的。安全

相关文章
相关标签/搜索