牛腩新闻发布系统(1)——浅入浅出SQL触发器

背景:个人版机房收费系统完事后,接下来应该是合作版的机房收费系统,但是迟迟没有开始,最近才打算合作,“迟迟没有开始”的时间用来学习牛腩新闻发布系统了,也算是时间的合理分配利用吧!刚刚开始的,比较容易上手,因为之前用VS重构了机房收费系统,对VS有亲切感,再加上牛腩老师幽默风趣,到目前为止,学习牛腩新闻发布系统是很有乐趣的。11集的时候,牛腩老师使用了触发器,之前听说过,但是没有实践,现在来实践一下,也算是还上“欠下的债”吧!


一、What?


    触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete,update)时就会激活它执行,触发器经常用于加强数据的完整性约束和业务规则等。其实往简单了说,就是触发器就是一个开关,负责灯的亮与灭,你动了,它就亮了。


    SQL Server中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。


    DML触发器分为:
    1、after触发器(之后触发)
insert触发器,update触发器,delete触发器
    2、instead of 触发器 (之前触发)


    其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

    触发器有两个特殊的表:插入表(inser
ted表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。


牛腩新闻发布系统(1)——浅入浅出SQL触发器_第1张图片

    Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。


二、一张小图


牛腩新闻发布系统(1)——浅入浅出SQL触发器_第2张图片


三、How?


1、找到想要建立触发器的表,然后右击——〉新建触发器

牛腩新闻发布系统(1)——浅入浅出SQL触发器_第3张图片


2、显示下面的代码界面

牛腩新闻发布系统(1)——浅入浅出SQL触发器_第4张图片


3、建立自己想要实现的触发器功能[删除类别(其下的新闻和新闻评论一起删除)]

     因为表与表之间有外键的联系,删除的时候容易出错,除了用存储过程来解决这个问题,还可以用触发器。

牛腩新闻发布系统(1)——浅入浅出SQL触发器_第5张图片


4、新建查询——〉delete from category where id=15——〉执行

牛腩新闻发布系统(1)——浅入浅出SQL触发器_第6张图片


5、在VS中添加代码:

(1)、CategoryDAO

 /// <summary>
 /// 删除类别(连同其下的新闻及新闻评论一起删除)
 /// </summary>
 /// <param name="id">类别ID</param>
 /// <returns></returns>

        public bool Delete(string id)
        {
            bool flag = false;
            string sql = "delete from category where id=@id";
            SqlParameter[] paras = new SqlParameter[]{
                new SqlParameter("@id",id)
            };
            int res = sqlhelper.ExecuteNonQuery(sql, paras);
            if (res > 0)
            {
                flag = true;
            }
            return flag;
        }

(2)、Default

 protected void Button1_Click1(object sender, EventArgs e)
    {
        string id = TextBox1.Text;
        string caName = TextBox2.Text;
        bool b = new CategoryDAO().Delete(id);
        Response.Write (b);
        GridView1.DataSource = new CategoryDAO().SelectAll();
        GridView1.DataBind();
    }

6、开始执行(不调试) 

牛腩新闻发布系统(1)——浅入浅出SQL触发器_第7张图片  牛腩新闻发布系统(1)——浅入浅出SQL触发器_第8张图片


哒哒哒吐舌头~~~~删除成功... ...


四、收获


    之前一点都不想了解触发器,因为潜意识的给它定位:有点难,后期学习的时候再说吧!一拖再拖,终于拖不下去了,学习牛腩老师的视频,自我感觉,其实没有想象中的那么难,这不,轻轻松松就学会了嘛!

    其实,学习就是这样,困难的不是困难本身,而是你自己没有下定决心去解决困难!




你可能感兴趣的:(sql,触发器,server,新闻,发布)