Mysql教程

9.5 本章实例

在本小节中将在product表上创建3个触发器。每次激活触发器后,都会更新opertate表。product表和operate表的内容如表9.51和表9.52所示。

字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 产品编号 INT(10)
name 产品名称 VARCHAR(10)
function 主要功能 VARCHAR(50)
company 生产厂商 VARCHAR(20)
address 家庭住址 VARCHAR(50)
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
op_id 编号 INT(10)
op_type 操作方式 VARCHAR(20)
op_time 操作时间 TIME

按照下列要求进行操作:

1.在product 表上分别创建 BEFORE INSERT、AFTER UPDATE 和 AFTER DELETE 3 个触发器,触发器的名称分别为 product_bf_insert、product_af_update 和 product_af_deU 执行语句部分都是向operate表插入操作方法和操作时间。

2.对product表分别执行INSERT、UPDATE和DELETE操作。

3.删除product_bf_insert 和 product_af_update 这两个触发器。

本实例的执行过程如下:

1.创建product表和operate表

创建product表的SQL代码如下:

CREATE TABLE product (id INT(10) NOT NULL UNIQUE PRIMARY KEY ,name VARCHAR(20) NOT NULL , function VARCHAR(50), company VARCHAR(20) NOT NULL, address VARCHAR(50);

创建operate表的SQL代码如下:

CREATE TABLE operate(op_id INT(10) NOTNULL UNIQUE PRIMARY KEY AUTO_INCREMENT, op_name VARCHAR(20) NOT NULL,op_time TIME NOT NULL);

2.创建product_bf_insert触发器

创建product_bf_insert的SQL代码如下:

CREATE TRIGGER product_insert BEFORE INSERT ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Insert product', now());

创建完成后,执行SELECT语句来查看触发器的基本信息。代码执行结果如下:

mysql> SELECT * from information_schema.triggers where TRIGGER_NAME='product_bf_insert' \G
Empty set (0.19 sec)
mysql> SELECT * from information_schema.triggers where TRIGGER_NAME='product_insert' \G
*************************** 1. row ***************************
           TRIGGER_CATALOG: NULL
            TRIGGER_SCHEMA: example
              TRIGGER_NAME: product_bf_insert
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: NULL
       EVENT_OBJECT_SCHEMA: example
        EVENT_OBJECT_TABLE: product
              ACTION_ORDER: 0
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: INSERT INTO operate VALUES(null, 'Insert product', now())
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: NULL
                  SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                   DEFINER: root@localhost
      CHARACTER_SET_CLIENT: utf8
      COLLATION_CONNECTION: utf8_general_ci
        DATABASE_COLLATION: utf8_general_ci
1 row in set (0.19 sec)

执行结果显示,触发器product_bf_insert己经创建成功。

3创建product_af_update触发器

创建product_af_update的SQL代码如下:

CREATE TRIGGER product_af_update AFTER UPDATE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Update product', now());

创建完成后,执行SELECT语句来查看触发器product_af_update的基本信息。

4.创建product_af_del触发器

创建product_af_del的SQL代码如下:

CREATE TRIGGER product_af_del AFTER DELETE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'delete product', now());

创建完成后,执行SELECT语句来查看触发器pmduct_af_del的基本信息。

5.对product进行操作

向product表中插入一条记录。SQL代码执行如下:

INSERT INTO product VALUES(1,'abc','治疗感冒','北京abc制药厂','北京市昌平区');

结果显示,product表的记录插入完成。而且,成功的触发了producr_bf_insert代触发器。

然后,更新product表的记录。将地址变为‘北京市海淀区’。SQL代码执行如下:

UPDATE product SET ADDRESS='北京市海淀区' WHERE id=1;

结果显示,PRODUCT表的记录更新完成。而且,成功的触发了product_af-update触发器。 最后,要在product表中删除一条记录。SQL代码执行如下:

DELETE FROM product WHERE id=1;

结果显示,记录删除成功。而且,成功触发了product_af_update触发器。

6.删除触发器

删除触发器product_bf_insert SQL代码执行如下:

DROP TRIGGER product_bf_insert;

触发器删除完成。执行SELECT语句来查看触发器是否还存在,SELECT语句执行 如下:

SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='product_bf_insert\G

结果显示,触发器product_bf_insert已经不存在了。下面将删除触发器product_af_insert, 8卩[代码执行如下:

DROP TRIGGER product_af__update;

触发器product_af_update删除完成。


关注微信获取最新动态