zoukankan      html  css  js  c++  java
  • Chapter 5. 事务、触发器、存储过程

    =====事务=====

    使用事务来保证多条SQL语句同时执行成功或者同时执行失败

    1、打开一个事务:begin transaction

    2、只要有任何一条SQL语句执行出错,最后的结果就会出错

        程序回滚:rollback transaction

    3、如果没有出错

        提交该事务:commit transaction

    使用@error全局变量来判断是否出错

    分类:

    自动提交事务:

    当执行语句时,数据库自动打开事务,不出错数据库自动提交事务,出错数据库自动回滚

    隐式事务:

    每次执行一条SQL语句的时候,数据库自动打开一个事务,但是需要手动提交或者回滚事务

    语法:set implicit_transaction (on / off)

    显示事务:

    每次执行一条SQL语句的时候,需要手动打开事务,手动提交事务或者回滚事务

    begin tran

    ...

    commit tran

    ...

    rollback tran

    ACID特性:

    原子性:事务必须是原子工作单元;对于其数据修改,要么全部执行,要么全部不执行

    一致性:在事务执行之前和执行之后,数据保持一致

    隔离性:由并发事务所作的修改必须与任何其他并发事务所做的修改隔离

    持久性:事务完成后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

    ====== 存储过程 ======

    和C#里的方法一样,由存储过程名、存储过程参数组成,可以有返回值。

    if else、while、变量、insert、select都可以在存储过程中使用

    优点:

    执行速度更快:在数据中保存的存储过程语句都是编译过的

    允许模块化程序设计:类似方法的复用

    提高系统安全性:防止SQL注入

    减少网络流通量:只要传输、存储过程的名称

    分类:

    系统存储过程:sp_ ...

    1、返回当前实例中的所有数据库的基本信息

      sp_database

    2、返回当前数据库中的所有的表

      sp_table

    3、返回某个表下的所有的列

      sp_columns 列名

    4、查看某个存储过程

      sp_helptext '...'

    自定义存储过程:usp_ ...

    create proc 名称  --创建

    as

    begin

      语句

    end

    exec proc 名称 --调用

    drop proc 名称 --删除

    ===== 触发器 =====

    作用:自动化操作,减少了手动操作以及出错的几率

    触发器是一种特殊类型的存储过程,不同于前面介绍的一般的存储过程。(在SQL内部把触发器看作是存储过程但是不能传递参数)

    一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。

    触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。

    触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。

    在SQL Server里,触发器就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

    分类:

    DML触发器:

    insert 执行插入操作,使用inserted表

    delete 执行删除操作,使用deleted表

    update  执行更新操作,同时使用inserted和deleted表

    after(for)在语句执行完毕之后触发,按语句触发,而不是所影响的行数,

                    无论所影响多少行,只触发一次。可以递归触发,最高32级

    instead of 用来替换原来的操作,不会递归触发,可以在约束被检查之前触发

    DDL触发器:

    create table

    create database

    alter

    drop

  • 相关阅读:
    css word-wrap与word-break区别
    input输入框光标位置问题
    正则表达式(二)- 位置匹配攻略
    正则表达式(一)- 字符匹配攻略
    mac电脑重启nginx报错nginx: [error] invalid PID number "" in "/usr/local/var/run/nginx.pid"
    指定js文件不使用 eslint 语法检查
    管理github/gitlab生成多个ssh key
    前端切图两种方法整理
    梳理:移动端Viewport的知识
    切图 — Photoshop(转载)
  • 原文地址:https://www.cnblogs.com/xiao55/p/5584230.html
Copyright © 2011-2022 走看看