mysql触发器实例附答案

合集下载

mysql触发器new和old

mysql触发器new和old

mysql触发器new和old下⾯为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在触发器⽅⾯遇到过类似的问题,不妨⼀看,相信对您会有所帮助。

mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。

对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;⽽UPDATE语句可以在和NEW以及OLD同时使⽤。

下⾯是⼀个UPDATE中同时使⽤NEW和OLD的例⼦。

CREATE TRIGGER tr1BEFORE UPDATE ON t22FOR EACH ROWBEGINSET @old = OLD.s1;SET @new = NEW.s1;END;现在如果t21表中的s1列的值是55,那么执⾏了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成55,⽽@new的值将会变成56。

触发器的执⾏间隔:FOR EACH ROW⼦句通知触发器每隔⼀⾏执⾏⼀次动作,⽽不是对整个表执⾏⼀次。

列值递增:create table a(id int primary key auto_increment,##设置为⾃动递增name varchar(10));设置初始值为1000 :ALTER TABLE tablename AUTO_INCREMENT=1000;。

测验答案-第15章触发器的创建与管理

测验答案-第15章触发器的创建与管理

测验填空题(1) 按激活事件类型的不同,可以把SQL Server 2005系统提供的触发器分为两大类,即和。

答案:DML触发器,DDL触发器(2) 可以使用系统存储来指定要对表执行的第一个AFTER触发器。

答案:sp_settriggerorder选择题(1) 关于AFTER和INSTEAD OF触发器叙述中错误的是哪一个。

A. 既可以在表上也可以在视图上定义AFTER触发器。

B. 既可以在表上也可以在视图上定义INSTEAD OF触发器。

C. 可以为一个激活事件定义多个AFTER触发器。

D. 只能为一个激活事件定义一个INSTEAD OF触发器。

答案:A(2) 如果表上有一个针对UPDATE操作的触发器,当对该表执行UPDATE操作时关于inserted和deleted表的说法中正确的是哪一个。

A. inserted和deleted表中都没有记录。

B. inserted和deleted表中都有记录。

C. inserted表中有记录,deleted表中没有记录。

D. inserted表中没有记录,deleted表中有记录。

答案:B(3) 如果希望将通过视图删除记录的操作转换成直接删除基本表中记录的操作,可以通过在视图上创建哪种类型的触发器来实现。

A. ALTER DELETEB. INSTEAD OF DELETEC. BEFORE DELETED. CHANGE DELETE答案:B(4) 在触发器的定义中,可以使用下列哪个命令。

A. CREATE INDEXB. RESTORE DATABASEC. INSERT INTOD. ALTER DA TABASE答案:C判断题(1) 如果针对一个激活事件定义了多个触发器,可以为这些触发器指定执行先后顺序。

答案:×(2) inserted和deleted表中的数据只能读,不能写入。

答案:√(3) 可以以CLR的方式编写SQL Server 2005的触发器。

mysql update触发器条件语句

mysql update触发器条件语句

mysql update触发器条件语句MySQL是一种常用的关系型数据库管理系统,它支持触发器(trigger)功能,可以在数据库中的表上定义触发器,当满足某些条件时,触发器会自动执行相应的操作。

在使用MySQL的update 触发器时,可以通过条件语句来指定触发器执行的条件。

下面列举了10个不同的MySQL update触发器条件语句的例子。

1. 在更新操作时,限制某个字段的值必须大于10:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name <= 10 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be greater than 10'; END IF;END;```2. 在更新操作时,限制某个字段的值必须在一个指定的范围内:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name < 0 OR NEW.field_name > 100 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be between 0 and 100';END IF;END;```3. 在更新操作时,限制某个字段的值必须是一个指定的枚举值:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name NOT IN ('value1', 'value2', 'value3') THEN SIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be one of value1, value2, or value3';END IF;```4. 在更新操作时,限制某个字段的值必须满足某个正则表达式:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name NOT REGEXP '^[A-Za-z]+$' THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must contain only letters';END IF;END;```5. 在更新操作时,限制某个字段的值必须是另一个表中的某个字段的最大值:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWDECLARE max_value INT;SELECT MAX(field_name) INTO max_value FROM other_table; IF NEW.field_name < max_value THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be greater than the maximum value in other_table';END IF;END;```6. 在更新操作时,限制某个字段的值必须是另一个表中的某个字段的最小值:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINDECLARE min_value INT;SELECT MIN(field_name) INTO min_value FROM other_table; IF NEW.field_name > min_value THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be less than the minimum value in other_table';END IF;END;```7. 在更新操作时,限制某个字段的值必须是另一个字段的两倍:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name <> 2 * OLD.field_name THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be twice the value of the old field_name';END IF;END;```8. 在更新操作时,限制某个字段的值必须是另一个字段的平方:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name <> OLD.field_name * OLD.field_name THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be the square of the old field_name';END IF;END;```9. 在更新操作时,限制某个字段的值必须是另一个字段的倒数:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name <> 1 / OLD.field_name THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be the reciprocal of the old field_name';END IF;END;```10. 在更新操作时,限制某个字段的值必须是另一个字段的百分比:```sqlCREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGINIF NEW.field_name <> OLD.field_name / 100 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'field_name must be the percentage of the old field_name';END IF;END;```以上是10个不同的MySQL update触发器条件语句的例子,通过这些条件语句可以限制更新操作的条件,保证数据的完整性和准确性。

MySQL数据库应用与开发技术 第8章 触发器

MySQL数据库应用与开发技术 第8章 触发器
• 如果修改后的值大于100,则值为100 • 如果修改后的值小于0,则值为0 • 如果修改后的值为旧值2倍以上,则值为旧值2倍
19
建表脚本
➢ CREATE DATABASE IF NOT EXISTS mydb; ➢ USE mydb;
➢ DROP TABLE IF EXISTS `account`; ➢ CREATE TABLE `account` ( ➢ `id` int(10) unsigned NOT NULL auto_increment, ➢ `user` varchar(45) NOT NULL, ➢ `amount` int(11) NOT NULL default '0', ➢ PRIMARY KEY (`id`) ➢ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; ➢ INSERT INTO `account` (`id`,`user`,`amount`) VALUES ➢ (1,'李知龙',55), ➢ (2,'卢中明',80), ➢ (3,'乔大平',30);
• 可在before触发器中赋值、取值 • 可在after触发器中取值
old
• 只能用于取值,因为赋值没意义
INSERT语句,只有new合法 DELETE语句,只有old才合法 UPDATE语句,可以同时使用new和old
18
课程练习2
➢ 创建触发器:
upd_check
➢ 功能作用:
修改Account表中的记录的amount字段时,作如下检查:
4
触发器作用
➢ 数据约束
实现数据完整性检查和约束

mysql trigger用法

mysql trigger用法

mysql trigger用法MySQL触发器(Trigger)是一种与表关联的数据库对象,当满足特定条件时自动执行。

触发器可以在插入、更新或删除操作之前或之后触发。

以下是MySQL触发器的基本用法:1. 创建触发器:```sqlCREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROWBEGIN-- 触发器执行的SQL语句END;```其中:* `trigger_name` 是触发器的名称。

* `trigger_time` 是触发的时间,可以是 `BEFORE` 或 `AFTER`。

* `trigger_event` 是触发的事件,可以是 `INSERT`、`UPDATE` 或`DELETE`。

* `table_name` 是与触发器关联的表名。

* `FOR EACH ROW` 表示触发器对每一行数据都执行一次。

2. 示例:假设我们有一个名为 `orders` 的表,其中包含 `order_id`、`customer_id` 和 `order_date` 列。

我们希望在插入新的订单时自动将订单日期设置为当前日期。

```sqlCREATE TRIGGER set_order_date_trigger BEFORE INSERT ON orders FOR EACH ROWBEGINSET NEW.order_date = CURDATE();END;```上述触发器会在向 `orders` 表插入新行之前,将 `order_date` 列设置为当前日期。

3. 删除触发器:```sqlDROP TRIGGER IF EXISTS trigger_name;```4. 查看触发器:可以使用以下命令查看当前数据库中的所有触发器:```sqlSHOW TRIGGERS;```5. 注意:* 触发器是一种强大的功能,可以用于实现各种复杂的业务逻辑。

mysql触发器写法

mysql触发器写法

mysql触发器写法MySQL触发器是一种在指定的表上自动执行的数据库对象。

它能够在特定的操作(insert、update、delete)发生时,自动触发相应的动作。

本文将介绍MySQL触发器的写法,并提供参考内容。

MySQL触发器的写法如下:```CREATE TRIGGER trigger_nameAFTER/BEFORE INSERT/UPDATE/DELETE ON table_name FOR EACH ROWBEGIN-- 触发器动作END;```触发器包含以下几个关键部分:1. 触发器名称(trigger_name):触发器的名称,用于区分不同的触发器。

2. 触发时间(AFTER/BEFORE):指定触发器在所指定的操作(INSERT/UPDATE/DELETE)之前或之后执行。

3. 触发事件表(table_name):指定触发器所属的表。

4. 触发条件(FOR EACH ROW):触发器执行的条件,常用于指定仅对受影响的行执行触发器。

5. 触发器动作(BEGIN...END):触发器要执行的操作,在BEGIN和END之间编写具体的SQL语句。

下面是一个示例,演示了如何创建一个在插入数据之后自动更新指定表的修改时间的触发器:```CREATE TRIGGER update_modified_timeAFTER INSERT ON my_tableFOR EACH ROWBEGINUPDATE my_table SET modified_time = NOW() WHERE id = NEW.id;END;```在这个例子中,`update_modified_time`是触发器的名称,`AFTER INSERT`表示在进行插入操作之后触发,`my_table`是要触发器所属的表,`FOR EACH ROW`表示对每一行都执行触发器动作。

在BEGIN和END之间的SQL语句将更新`my_table`表中指定行的`modified_time`字段。

mysql上机—触发器

mysql上机—触发器
2、用删除学生表中学号sno='200215122'的记录来验证创建的触发器。
3、删除创建的触发器s_delete;
创建课程表பைடு நூலகம்ourse
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
1、Eno为主键;
2、Ename 取唯一值;
3、约定Sal+Deduct不少于3000;
4、创建一个触发器Insert_Sal,当插入某个教师时,若其job为副教授且工资sal<4000时,自动修正为4000;
5、验证创建的触发器Insert_Sal是否成功。
第二大题
在Mysql中运行下列命令
FOREIGN KEY (Cno) REFERENCES course(Cno));
插入记录student
insert into student
values('200215121','李勇','男',20,'CS'),
('200215122','刘晨','女',19,'CS');
插入记录course
第一大题:
创建数据库S-T
创建教师表Teacher,其中字段有
Eno NUMERIC(4) ,
Ename Char(10) ,
Job CHAR(8),
Sal Numeric(7,2),
Deduct Numeric(7,2),

mysql触发器实例附答案

mysql触发器实例附答案

触发器和常用函数第一部分:触发器概念题1触发器的含义和作用实践题在product表上创建三个触发器。

每次激活触发器后,都会更新operate表。

product表和operate表的内容如下按照下列要求进行操作1 在product表上分别创建BEFORE INSERT、AFTER UPDATE和AFTER DELETE 3个触发器,触发器名称分别为product_bf_insert、product_af_update和product_af_del。

执行语句部分都是向operate表插入操作方法和操作时间。

2 对product表分别执行INSERT、UPDATE和DELETE操作3 删除product_bf_insert和product_af_update这两个触发器执行步骤1.创建product表和operate表2.创建product_bf_insert触发器3.创建product_af_update触发器4.创建product_af_del触发器5.对product表进行操作6.删除触发器第二部分:MySQL常用函数文本函数数字函数日期和时间函数概念题触发器是由INSERT、UPDATE和DELETE等事件来触发某种特定操作。

满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。

这样做可以保证某些操作的一致性。

实践题1 CREATE TABLE product(id INT(10) NOT NULL UNIQUE PRIMARY KEY,name V ARCHAR(20) NOT NULL,function V ARCHAR(50),company V ARCHAR(20) NOT NULL,address V ARCHAR(50));CREATE TABLE operate(op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,op_name V ARCHAR(20) NOT NULL,op_time TIME NOT NULL,);2 CREATE TRIGGER product_bf_insert BEFORE INSERTON poduct FOR EACH ROWINSERT INTO operate V ALUES(null,’Insert product’,now());SELECT * FROMinformation_schema.triggers WHERE TRIGGER_NAME=’product_bf_insert ’ \G*(查看触发器product_bf_insert基本信息)3 CREATE TRIGGER product_af_update AFTER UPDA TEON product FOR EACH ROWINSERT INTO operate V ALUES(null,’Update product’,now());4 CREATE TRIGGER product_af_del AFTER DELETEON product FOR EACH ROWINSERT INTO operate V ALUES(null,’delete product’,now());5 INSERT INTO product V ALUES(1,’abc’,’治疗感冒’,’北京abc制药厂’,’北京市昌平区’); SELECT * FROM operate;UPDATE product SET address=’北京市海淀区’ WHERE id=1;SELECT * FROM operate;DELETE FROM product WHERE id=1;SELECT * FROM operate;6 DROP TRIGGER product_bf_insert;DROP TRIGGER product_af_update;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

触发器和常用函数
第一部分:触发器
概念题
1触发器的含义和作用
实践题
在product表上创建三个触发器。

每次激活触发器后,都会更新operate表。

product表和operate表的内容如下
按照下列要求进行操作
1 在product表上分别创建BEFORE INSERT、AFTER UPDATE和AFTER DELETE 3个触发器,触发器名称分别为product_bf_insert、product_af_update和product_af_del。

执行语句部分都是向operate表插入操作方法和操作时间。

2 对product表分别执行INSERT、UPDATE和DELETE操作
3 删除product_bf_insert和product_af_update这两个触发器
执行步骤
1.创建product表和operate表
2.创建product_bf_insert触发器
3.创建product_af_update触发器
4.创建product_af_del触发器
5.对product表进行操作
6.删除触发器
第二部分:MySQL常用函数
文本函数
数字函数
日期和时间函数
概念题
触发器是由INSERT、UPDATE和DELETE等事件来触发某种特定操作。

满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。

这样做可以保证某些操作的一致性。

实践题
1 CREATE TABLE product(
id INT(10) NOT NULL UNIQUE PRIMARY KEY,
name V ARCHAR(20) NOT NULL,
function V ARCHAR(50),
company V ARCHAR(20) NOT NULL,
address V ARCHAR(50)
);
CREATE TABLE operate(
op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
op_name V ARCHAR(20) NOT NULL,
op_time TIME NOT NULL,
);
2 CREATE TRIGGER product_bf_insert BEFORE INSERT
ON poduct FOR EACH ROW
INSERT INTO operate V ALUES(null,’Insert product’,now());
SELECT * FROM
information_schema.triggers WHERE TRIGGER_NAME=’product_bf_insert ’ \G*
(查看触发器product_bf_insert基本信息)
3 CREATE TRIGGER product_af_update AFTER UPDA TE
ON product FOR EACH ROW
INSERT INTO operate V ALUES(null,’Update product’,now());
4 CREATE TRIGGER product_af_del AFTER DELETE
ON product FOR EACH ROW
INSERT INTO operate V ALUES(null,’delete product’,now());
5 INSERT INTO product V ALUES(1,’abc’,’治疗感冒’,’北京abc制药厂’,’北京市昌平区’); SELECT * FROM operate;
UPDATE product SET address=’北京市海淀区’ WHERE id=1;
SELECT * FROM operate;
DELETE FROM product WHERE id=1;
SELECT * FROM operate;
6 DROP TRIGGER product_bf_insert;
DROP TRIGGER product_af_update;。

相关文档
最新文档