有一个学生管理程序,涉及到学生的证书,在这个程序里,学生可以自己添加一个或多个证书,把自己的证书信息添加到系统里,之后管理员对这些信息进行审核,确定证书的真实性。当学员的所有证书都审核通过后,学员的状态就会变为诚信,反之,只要有一个证书没有审核通过,学员状态就变为非诚信。或者是学员又重新上传了一个证书后,学员状态又变为非诚信,当管理员审核通过后,学员状态即改为程序。
学员表结构:(这里为了简单,省去或修改了部分信息)
学员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数据库教程之十五:MySQL触发器实例 准备工作: 先启动Navicat for MySQL,建立数据库 建立两个表:Goods(商品表)、Orders(订单表) Goods(商品表) create table Goods ( gid char(8) not null primary...
主要介绍了mysql触发器之触发器的增删改查操作,结合实例形式分析了mysql触发器的定义及使用触发器进行增删改查等相关操作技巧,需要的朋友可以参考下
MySQL 触发器简单实例 语法 CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER } –触发器有执行的时间设置:...
mysql触发器使用实例 看下例子基本上就会操作了!
主要介绍了mysql触发器(Trigger)简明总结和使用实例,需要的朋友可以参考下
本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...
Mysql触发器的例子,包括,创建,删除,修改,三种触发器的实例
MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...
主要介绍了mysql触发器原理与用法,结合实例形式分析了mysql触发器基本概念、原理、用法及操作注意事项,需要的朋友可以参考下
主要介绍了MySQL 触发器定义与用法,结合简单实例形式总结分析了mysql触发器的语法、原理、定义及使用方法,需要的朋友可以参考下
在SQL中,名词触发器指“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代 码。”(Wikipedia)说得简单一些,它是在一个特殊的...自动记录对一个特殊数据库表格所作更改的SQL命令块也是一个触发器实例。
在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而数据库对象触发器则用来实现由一些表事件触发的某个操作。在数据库系统中,当执行表事件时,则会激活触发器,从而执行器包含的操作。触发器的操作...
主要介绍了MySQL触发器简单用法,结合实例形式分析了mysql触发器的创建、执行、查看、删除等相关操作技巧,需要的朋友可以参考下
主要介绍了MySQL触发器运用于迁移和同步数据的实例教程,分别是SQL Server数据迁移至MySQL以及同步备份数据表记录的两个例子,需要的朋友可以参考下