有一个学生管理程序,涉及到学生的证书,在这个程序里,学生可以自己添加一个或多个证书,把自己的证书信息添加到系统里,之后管理员对这些信息进行审核,确定证书的真实性。当学员的所有证书都审核通过后,学员的状态就会变为诚信,反之,只要有一个证书没有审核通过,学员状态就变为非诚信。或者是学员又重新上传了一个证书后,学员状态又变为非诚信,当管理员审核通过后,学员状态即改为程序。
学员表结构:(这里为了简单,省去或修改了部分信息)
学员ID,名称,性别,状态
证书表结构:
证书ID,名称,状态,学员ID
首先来创建这两个表,如下是建表语句:
view plaincopy to clipboardprint?
/**
* 创建一个学生表
*
*/
CREATE TABLE `students` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`sex` VARCHAR(1) NOT NULL,
`status` INTEGER NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB;
/**
* 创建一个证书表
*
*/
CREATE TABLE `certs` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`status` INTEGER NOT NULL,
`student_id` INTEGER NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB;
/**
插入学生数据
*
*/
INSERT INTO students (id, name, sex, status) values(1, 'liuhongjun', 'M', 1);
INSERT INTO students (id, name, sex, status) values(2, 'pandeyou', 'M', 1);
/**
* 插入证书数据
*
*/
INSERT INTO certs (id, name, status, students_id) values (1, 'ACCP', 1, 1);
INSERT INTO certs (id, name, status, students_id) values (2, 'OSTA', 1, 1);
数据说明:
建好的的数据都是完整的,学员liuhongjun,对应了有两个证书,分别是ACCP和OSTA证书,证书的状态都为1,也就是审核通过的。
所以学员liuhongjun的状态是1,如下:
view plaincopy to clipboardprint?
+----+------------+-----+--------+
| id | name | sex | status |
+----+------------+-----+--------+
| 1 | liuhongjun | F | 1 |
| 2 | pandeyou | M | 1 |
+----+------------+-----+--------+
+----+------+--------+-------------+
| id | name | status | students_id |
+----+------+--------+-------------+
| 1 | ACCP | 1 | 1 |
| 2 | OSTA | 1 | 1 |
+----+------+--------+-------------+
接下来,开始建立触发器,建立触发器代码如下:(触发器语法请参见:http://dev.mysql.com/doc/refman/5.1/zh/triggers.html#create-trigger)
view plaincopy to clipboardprint?
/**
* 创建证书触发器
*
* 名称:trigger_certs
* 触发时间:在certs表更新以后(AFTER)
* 关联表:students
* 执行的事务:如果该学员的证书全部状态都为1时,更新学员的状态为1,否则更新学员的状态为0。
*/
delimiter //
CREATE TRIGGER trigger_certs AFTER UPDATE ON certs
FOR EACH ROW BEGIN
SET @studentsId = OLD.students_id;
IF OLD.status != NEW.status THEN
SELECT COUNT(id) INTO @total FROM certs c WHERE c.students_id = NEW.students_id AND c.status = 0 LIMIT 1;
IF @total = 0 THEN
UPDATE students s SET s.status = 1 WHERE s.id = @studentsId;
ELSE
UPDATE students s SET s.status = 0 WHERE s.id = @studentsId;
END IF;
END IF;
END;
结果:
+----+------------+-----+--------+
| id | name | sex | status |
+----+------------+-----+--------+
| 1 | liuhongjun | F | 1 |
| 2 | pandeyou | M | 1 |
+----+------------+-----+--------+
学员liuhongjun的状态又改为了1。
相关推荐
本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...
MySQL触发器是数据库管理系统中的一种重要特性,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)之前或之后执行自定义的SQL语句。触发器可以用来维护数据的完整性和一致性,执行复杂的业务逻辑,或者实现一些...
MySQL触发器是数据库管理系统中的一个重要特性,它允许在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。这为数据库的业务规则提供了强大的支持,可以确保数据的一致性和完整性。以下是...
通过以上两个实例,我们可以看到MySQL触发器的强大功能,它们能够在无需编程的情况下自动执行预设的逻辑,大大简化了数据库的管理和维护工作。无论是数据的自动统计,还是审计日志的记录,触发器都能够提供高效且...
MySQL中的触发器是一种数据库对象,它与特定的表相关联,并在对表执行INSERT、UPDATE或DELETE操作之前或之后自动执行预定义的SQL语句。触发器的主要作用是增强数据库的逻辑控制,确保数据完整性、记录操作日志以及...
MySQL触发器是数据库管理系统中的一个重要概念,主要用于在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。触发器可以增强数据的完整性和一致性,实现复杂的业务逻辑,而无需在应用程序...
本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...
MySQL触发器是数据库管理系统中的一个重要特性,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)发生之前或之后执行自定义的SQL代码。这些自动执行的代码块可以用来实现复杂的业务逻辑,确保数据的一致性和...
五、触发器实例 - **INSERT触发器**:当向表中插入新数据时执行。 - **UPDATE触发器**:当对表中的数据进行更新时执行。可以用于验证更新后的数据是否满足特定条件,或者同步相关表的数据。 - **DELETE触发器**:当...
**MySQL触发器概念** 触发器是一种特殊类型的存储程序,它会在数据库表上的特定事件发生时自动执行。这些事件包括 INSERT、UPDATE 和 DELETE 操作。触发器可以在行级上执行,也就是说,它们可以对表中的每一行受到...
MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...
本篇文档将着重介绍触发器这一特性,通过详细的解析与实例演示帮助用户了解如何在实际项目中有效地使用触发器。 #### 规约与风格 为了更好地展示实际代码,如来自MySQL客户端程序的输出结果,本文档将采用特殊字体...
本文详细介绍了MySQL触发器的概念、作用以及一个具体的触发器实例。通过这个实例,我们不仅学习了如何创建触发器,还了解了如何在触发器中使用变量、条件判断等SQL语句,以及如何处理数据完整性的问题。触发器是...
MySQL触发器是数据库管理系统中的一个重要特性,用于在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。触发器的主要作用是实现数据的完整性约束,或者进行复杂的业务逻辑处理,而这些...
初始的MySQL触发器设计会导致死循环,因为更新操作会再次触发触发器,形成无限递归。为了解决这个问题,我们需要将触发器设置为在操作之前执行(BEFORE),这样在数据被实际写入表之前就完成分类计算,避免了死循环...
《MySQL使用实例book》是一本全面讲解MySQL数据库应用与开发的书籍,旨在帮助读者逐步掌握MySQL的实际操作技巧。通过对本书的学习,你可以深入了解MySQL在实际工作中的应用,提升数据库管理、查询优化以及数据存储的...
MySQL触发器是数据库管理系统中的一种重要机制,它允许在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。触发器主要用于实现数据完整性约束,业务规则的强制,以及数据的自动处理。以下...