`
ychw365
  • 浏览: 53423 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

mysql触发器实例

阅读更多

有一个学生管理程序,涉及到学生的证书,在这个程序里,学生可以自己添加一个或多个证书,把自己的证书信息添加到系统里,之后管理员对这些信息进行审核,确定证书的真实性。当学员的所有证书都审核通过后,学员的状态就会变为诚信,反之,只要有一个证书没有审核通过,学员状态就变为非诚信。或者是学员又重新上传了一个证书后,学员状态又变为非诚信,当管理员审核通过后,学员状态即改为程序。

学员表结构:(这里为了简单,省去或修改了部分信息)

学员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触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...

    MySQL数据库教程之十五:MySQL触发器实例

    MySQL数据库教程之十五:MySQL触发器实例 准备工作: 先启动Navicat for MySQL,建立数据库 建立两个表:Goods(商品表)、Orders(订单表) Goods(商品表) create table Goods ( gid char(8) not null primary...

    mysql触发器之触发器的增删改查操作示例

    主要介绍了mysql触发器之触发器的增删改查操作,结合实例形式分析了mysql触发器的定义及使用触发器进行增删改查等相关操作技巧,需要的朋友可以参考下

    MySQL 触发器详解及简单实例

    MySQL 触发器简单实例 语法 CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER } –触发器有执行的时间设置:...

    mysql触发器使用实例

    mysql触发器使用实例 看下例子基本上就会操作了!

    mysql触发器(Trigger)简明总结和使用实例

    主要介绍了mysql触发器(Trigger)简明总结和使用实例,需要的朋友可以参考下

    mysql触发器之创建使用触发器简单示例

    本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...

    mysql触发器

    Mysql触发器的例子,包括,创建,删除,修改,三种触发器的实例

    mysql 触发器用法实例详解

    MySQL触发器语法详解:  触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...

    mysql触发器原理与用法实例分析

    主要介绍了mysql触发器原理与用法,结合实例形式分析了mysql触发器基本概念、原理、用法及操作注意事项,需要的朋友可以参考下

    MySQL 触发器定义与用法简单实例

    主要介绍了MySQL 触发器定义与用法,结合简单实例形式总结分析了mysql触发器的语法、原理、定义及使用方法,需要的朋友可以参考下

    妙用触发器有效的管理 MySQL数据库

    在SQL中,名词触发器指“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代 码。”(Wikipedia)说得简单一些,它是在一个特殊的...自动记录对一个特殊数据库表格所作更改的SQL命令块也是一个触发器实例。

    MySQL 触发器的基础操作(六)

     在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而数据库对象触发器则用来实现由一些表事件触发的某个操作。在数据库系统中,当执行表事件时,则会激活触发器,从而执行器包含的操作。触发器的操作...

    MySQL触发器简单用法示例

    主要介绍了MySQL触发器简单用法,结合实例形式分析了mysql触发器的创建、执行、查看、删除等相关操作技巧,需要的朋友可以参考下

    MySQL触发器运用于迁移和同步数据的实例教程

    主要介绍了MySQL触发器运用于迁移和同步数据的实例教程,分别是SQL Server数据迁移至MySQL以及同步备份数据表记录的两个例子,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics