最近很懒,也有忙的原因~~一些东西懒得发上来了·~~还是要写上来才可以,不然学到的东西以后我就忘记了
以下只保证在MSSQL下顺利执行~~可能在MySql不太一样。
最近在做作业的时候想用用数据库的触发器写写~发觉还不是一般的烦呀~~变量多了就觉得有点烦了~~不过语言还是挺容易上手的~~
插播一句:ID自增的写法

create table ritem(
 id int IDENTITY(1,1)
);

触发器的基本写法
[code=sql]
create trigger 触发器名 on 数据表名 for (insert|update|delete)
...


最近很懒,也有忙的原因~~一些东西懒得发上来了·~~还是要写上来才可以,不然学到的东西以后我就忘记了
以下只保证在MSSQL下顺利执行~~可能在MySql不太一样。
最近在做作业的时候想用用数据库的触发器写写~发觉还不是一般的烦呀~~变量多了就觉得有点烦了~~不过语言还是挺容易上手的~~
插播一句:ID自增的写法

create table ritem(
 id int IDENTITY(1,1)
);

触发器的基本写法

create trigger 触发器名 on 数据表名 for (insert|update|delete)
as
begin
 在这里写代码
end

定义变量,并赋值

create trigger t_insert_ritem on ritem for insert
as
begin
 declare @id int
 select @id=id from inserted
 -- 从插入的数据获得ID的值,还有一个deleted
 -- inserted表示新的数据,deleted表示旧的数据(自己理解的,不知道对不对?)

 set @id = @id - 1
 -- 另一种赋值

 PRINT @id
 -- 可以把值打印出来,在查询分析器结果可以看到
 raiserror('抛出错误 id的值为:%d',16,1,@id)
 -- 也可以这样输出

 if (@id<0) begin
  rollback transaction
  -- 回滚事务
 end

 if exists(select * from ritem where id=@id) begin
  -- 还可以用exists来判断是否为空
 end
end

CREATE TRIGGER TRIGGER_Update ON ritem
FOR UPDATE
AS
    if Update(UserName)
    begin
 -- 判断UserName有没有更新
    end
  1.插入操作(Insert)
  Inserted表有数据,Deleted表无数据
  2.删除操作(Delete)
  Inserted表无数据,Deleted表有数据
  3.更新操作(Update)
  Inserted表有数据(新数据),Deleted表有数据(旧数据)

当你更新一个数据想要把相关联的所有数据都更新的时候就要用游标(CURSOR)鸟~~MSSQL的遍历

declare @id int, @rid int
 declare cur_tmp CURSOR FOR select id,rid from ritem
 OPEN cur_tmp
 FETCH NEXT FROM cur_tmp INTO @id,@rid -- 这里是取到select的值
 WHILE @@FETCH_STATUS = 0
 BEGIN

 -- 在这中间加入循环

 FETCH NEXT FROM cur_tmp INTO @id,@rid
 END
 CLOSE cur_tmp
 DEALLOCATE cur_tmp -- 释放游标