| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8144 人关注过本帖
标题:[分享]触发器小例子
取消只看楼主 加入收藏
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
 问题点数:0 回复次数:4 
[分享]触发器小例子
触发器能进行一些约束.
这是个小例子,当Student表的StudentID列被发生更改时,BorrowStudent表的StudentID列也跟着更改.如果Student表删除某记录,BorrowStudent也删除对应StudentID的记录.

/*先删除将要创建而存在的表*/
drop table if exists Student;
drop table if exists BorrowStudent;

/*创建表*/
create table Student(
StudentID int not null primary key,
StudentName varchar(30) not null,
StudentSex enum('m','f') default 'm'
)engine=myisam;

create table BorrowStudent(
BorrowRecord int not null auto_increment primary key,
StudentID int not null,
BorrorDate date,
ReturnDate date,
foreign key(StudentID) references Student(StudentID)
)engine=myisam;

/*插入记录*/
insert into Student values(1235412,'java','m');
insert into Student values(3214562,'jiajia','m');
insert into Student values(5441253,'purana','f');

insert into BorrowStudent(StudentID,BorrorDate,ReturnDate)
values(1235412,'2007-01-01','2007-01-07');
insert into BorrowStudent(StudentID,BorrorDate,ReturnDate)
values(3214562,'2007-01-01','2007-01-07');
insert into BorrowStudent(StudentID,BorrorDate,ReturnDate)
values(5441253,'2007-01-01','2007-01-07');

/*创建触发器*/
delimiter $$
drop trigger if exists tduStudent$$
drop trigger if exists tddStudent$$
create trigger tduStudent before update
on Student for each row
begin
if new.StudentID!=old.StudentID then
update BorrowStudent
set BorrowStudent.StudentID=new.StudentID
where BorrowStudent.StudentID=old.StudentID;
end if;
end$$

create trigger tddStudent before delete
on Student for each row
begin
delete
from BorrowStudent
where BorrowStudent.StudentID=old.StudentID;
end$$
delimiter ;
搜索更多相关主题的帖子: 触发器 例子 分享 
2007-09-10 09:45
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
你为Table添加触发器.
又用update来更新同一Table?
mysql的触发器不行.
因为mysql的触发器.还是不怎么成熟的.

如果你想这么做.那只有用set new.field_name=value 这样的来做.

我的msn: myfend@
2007-09-10 14:31
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
按照你的要求,写了一个.
drop table if exists tbl_temp;
create table tbl_temp(
id int not null auto_increment key,
field_a int,
field_b int,
field_c int
)engine=myisam;

insert into tbl_temp(field_a,field_b,field_c) values(2,3,2);
insert into tbl_temp(field_a,field_b,field_c) values(1,2,3);
insert into tbl_temp(field_a,field_b,field_c) values(0,0,0);

delimiter $$
drop trigger if exists tr_set$$
create trigger tr_set before update
on tbl_temp for each row
begin
if new.field_a=1&&new.field_b=1 then
set new.field_c=1;
end if;
end$$
delimiter ;

我的msn: myfend@
2007-09-10 14:46
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
视图?.
但你的是创建表哦?.
mysql也可以check.只不过基本是没用的.

这种情况.那就在客户端里判断了.

我的msn: myfend@
2007-09-10 16:24
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
我这里可以.

我的msn: myfend@
2007-09-10 17:52
快速回复:[分享]触发器小例子
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016157 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved