1.理解触发器的概念与类型。
2.理解触发器的功能及工作原理。
3.掌握创建、更改、删除触发器的方法。
4.掌握利用触发器维护数据完整性的方法。
1.验证性实验:某同学定义产品信息product表,并对其触发器创建与管理
2.设计性试验:某同学定义产品信息product表,并对其触发器创建与管理
(一)验证性实验
某同学定义产品信息product表,主要信息有:产品编号、产品名称、主要功能、生产厂商、c厂商地址,生成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) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
在对product表进行数据操作时,需要对操作的内容和时间进行记录。于是定义了operate表,其表生成SQL语句为:
CREATE TABLE operate ( op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT , op_name VARCHAR(20) NOT NULL , op_tiem TIME NOT NULL )ENGINE=InnoDB DEFAULT CHARSET=utf8;
请完成如下任务:
1.在product表上分别创建BEFORE INSERT、AFTER UPDATE和AFTER DELETE3个触发器,触发器的名称分别为Tproduct_bf_insert、Tproduct_af_update和Tproduct_af_del。执行语句部分都是向operate表插入操作方法和操作时间。
(1)创建Tproduct_bf_insert触发器SQL代码如下:
CREATE TRIGGER Tproduct_bf_insert BEFORE INSERT ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Insert product', now());
(2)创建Tproduct_af_update触发器的SQL代码如下:
CREATE TRIGGER Tproduct_af_update AFTER UPDATE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Update product', now());
(3)创建Tproduct_af_del触发器的SQL代码如下:
CREATE TRIGGER Tproduct_af_del AFTER DELETE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'delete product', now());
2.对product表分别执行INSERT、UPDATE和DELETE操作,分别查看operate表。
(1)对product表中插入一条记录:1, 'abc','治疗感冒', '北京abc制药厂','北京市昌平区'
INSERT INTO product VALUES(1, 'abc','治疗感冒', '北京abc制药厂','北京市昌平区');
(2)更新记录,将产品编号为1的厂商住址:改为“北京市海淀区”。
UPDATE product SET address='北京市海淀区' WHERE id=1;
(3)删除产品编号为1的记录。
DELETE FROM product WHERE id=1;
3.删除Tproduct_bf_insert触发器
DROP TRIGGER Tproduct_bf_insert;
(二)设计性试验
1.在product表上分别创建AFTER INSERT、BEFORE UPDATE和BEFORE DELETE 3个触发器, 触发器的名称分别为product_af_insert、product_bf_update和Tproduct_bf_del。执行语句部分都是向operate表中插入操作方法和操作时间。
CREATE TRIGGER product_af_insert AFTER INSERT ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Insert product', now()); CREATE TRIGGER product_bf_update BEFORE UPDATE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'Update product', now()); CREATE TRIGGER Tproduct_bf_del BEFORE DELETE ON product FOR EACH ROW INSERT INTO operate VALUES(null, 'delete product', now());
2.查看product_bf_del触发器的基本结构。
SELECT * FROM information_schema.TRIGGERS WHERE trigger_name='product_bf_del';
3.对product表分别执行如下INSERT、UPDATE和DELETE操作,分别查看operate表。
INSERT INTO product VALUES(2, '止血灵','止血', '北京止血灵制药厂','北京市昌平区');
UPDATE product SET address='天津市开发区' WHERE id=2;
DELETE FROM product WHERE id=2;
4.删除product_bf_update触发器。
1.能否在当前数据库中为其他数据库创建触发器?
答:能。
2.触发器何时被激发?
答:触发器主要是通过事件(增、删、改)进行触发被自动调用执行的。
按要求完成,详细记录操作步骤,书写实验报告。所有实验环节均由每位学 生独立完成,认真记录操作过程,严禁抄袭他人实验结果。
通过本次实验了解了触发器的作用,学习了怎么使用触发器,关于表增加修改和删除的时候触发器的工作方式。触发器是一个功能强大的工具。可以使多个不同的用户能够在保持数据完整性和一致性的良好环境进行修改操作。