• 技术文章 >php教程 >PHP开发

    sql触发器(insert,update,delete)

    高洛峰高洛峰2016-12-14 16:19:08原创655
    --insert 触发器
    create trigger tri_insert
    on student --将要进行更改的表名
    for insert --给表插入一条数据的时候触发
    as
    declare @student_id char(10) --定义一个变量
    SELECT @student_id=s.student_id from --把查询出的指定字段的值赋值给变量
    student s inner join inserted i
    on s.student_id=i.student_id
    if @student_id='0000000001'
    begin
    raiserror('不能插入1的学号!',16,8)
    rollback tran
    end
    go

    --update触发器
    create trigger tri_update
    on student --将要进行更改的表名
    for update --给表修改一条数据的时候触发
    as
    if update(student_id)
    begin
    raiserror('学号不能修改!',16,8)
    rollback tran
    end
    go


    --delete触发器
    create trigger tri_delete
    on student --将要进行更改的表名
    for delete --给表删除一条数据的时候触发
    as
    declare @student_id varchar(10)
    select @student_id=student_id from deleted
    if @student_id='admin'
    begin
    raiserror('错误',16,8)
    rollback tran
    end

    解释:在删除(delete)数据的时候,可以假定数据库将要删除的数据放到一个deleted临时表中,我们可以向读取普通的表一样,select 字段 from deleted
    而insert的时候道理一样,只不过是把要插入的数据放在inserted表中。
    更新操作可以认为是执行了两个操作,先把那一行记录delete掉,然后再insert,这样update操作实际上就对deleted表和inserted表的操作,所以不会有updated表了,有的时候两个表是主外键关系,想删除主表数据的同时把子表相关的数据也删除,这个时候如果用触发器就没有效果了,因为这个触发器是在你删除表后才触发的,这个时候直接终止,提示“有主外键关系,不能删除等”,所有这样的删除触发器是没有效果的

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:sql触发器
    上一篇:从SEO视角判断CMS系统的好坏 下一篇:dedecms发布分页问题完全解决方案
    Web大前端开发直播班

    相关文章推荐

    • linux awk命令详解• PHP中session使用方法详解第2/2页• Zend Framework缓存Cache用法简单实例• struts2的<s:iterator >标签的用法• MySQL常用命令大全

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网