mysql触发器范例

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.s

免责声明: 本文仅代表作者个人观点,与无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

相关资料

推荐阅读

友情链接:
Copyright © 2013-2023 页 当前在线:329人  网站在1时55分41秒内访问总人数:26594人 当前 18.73%  

mysql触发器范例

相关文章:

你感兴趣的文章:

标签云: