zoukankan      html  css  js  c++  java
  • SQL Server基础 存储过程、触发器、级联删除

    一、存储过程

    1、存储过程:存储过程是一组编译在单个执行计划中的T-SQL语句,就像函数一样的会保存在数据库中(可编程性)

    2、存储过程的优点:

      1)、允许模块化程序设计

      2)、允许更快执行如果某操作需要大量T-SQL代码或需要重复执行,存储过程将比T-SQL批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可以在首次执行该过程后使用该过程的内存中版本。

      3)、减少网络流量

      4)、一个需要数百行T-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

      5)、作为安全机制使用

    3、创建

    create  proc  存储过程名          //不需要写返回参数类型
    
       参数 
    as                          //as 后面写和函数体,只有开始没有结束
    
       函数体
    
    return 值             

    实例:

    create proc JiaFa      
    
    @a int;
    
    @b int;
    
    as
    
      declare @c int;
    
      select @c = @a + @b;
    
       return @c
    View Code

    3、调用
     exec 存储过程名

    实例:

    declare @f int;
    
    exec @f = JiaFa 3,5;
    
    print @f;
    View Code

    二 触发器

       是一类特殊的存储过程,在对表update,insert或delete语句时来触发它, 没有参数,没有返回值;
       一个表的一个动作只能有一个触发器

    1 创建

    create trigger  触发名称    //命名规范   表名_动作
    
    on   表名                  //针对于哪一个表
    
    for   动作                 //针对于哪一个动作来触发
    
    as  
    
       触发器内容

      2、for 触发器

              在动作执行之后触发(增删改执行完成后,触发器中的代码再执行)

      3、instead of触发器

             替代触发操作执行,写了这个之后,写的执行代码就没有用了,就被触发器的代码覆盖了

    例:

    create triggre users_delete
    
    on users
    
    for delete
    
    as
       
       select * from usere
    View Code
    create trigger users_delete
    
    on users
    
    instead of delete 
    
    as
    
      select * from deleted
    
      --每次执行删除命令时打印要删除的那一个
    View Code

      deleted    -- delete的过去式,要删除的那一个。只能用在触发器中 

      三 级联删除 

                触发器最根本最基础最常见的用法

    create  trigger class_delete
    
    on class
    
    instead of delete
    
    as                                    // 要删除class表数据,class 表被 users 表外键约束,那么需要级联删除
        declare @sno varchar(20);
    
       select @sno = sno from deleted      //deleted固定格式,为删除执行所要删除的数据,这里并没有执行删除,而是把他们显示出来
    
                                           //在这里获得要删除的数据的 键值,然后先删除其他表中此 键值 对应的数据
      delete from score where sno = @sno;
      delete from student where sno = @sno;
  • 相关阅读:
    Django测试开发-20-settings.py中templates配置,使得APP下的模板以及根目录下的模板均可生效
    Django测试开发-19-auth模块之session,cookie
    Django测试开发-19-引入xadmin
    Django测试开发-17-报错:No module named 'django.contrib.staticfiles.templatetags'
    Django测试开发-16-ImportError: cannot import name 'six' from 'django.utils'
    Django测试开发-15-django.utils.encoding未发现 python_2_unicode_compatible包
    Django测试开发-14-数据库表设计:多对多,一对一,一对多
    Django测试开发-13-优化表单提交(GET、POST、登录、注册)
    Django测试开发-12-优化admin (2020-03-13 18:57)
    Django测试开发-11-返回json数据
  • 原文地址:https://www.cnblogs.com/Tanghongchang/p/6560462.html
Copyright © 2011-2022 走看看