精华内容
下载资源
问答
  • 假如我有叁个存储过程,每个存储过程中都显示申明了事物,当我依次调用这叁个存储过程,如果其中有一个存储过程中发生了错误,那么其它两个存储过程中的事物都要回滚,这样的如何做呢? 下面我把代码贴出来让大家看...
    问题有点复杂。 
    假如我有叁个存储过程,每个存储过程中都显示申明了事物,当我依次调用这叁个存储过程,如果其中有一个存储过程中发生了错误,那么其它两个存储过程中的事物都要回滚,这样的如何做呢?
    下面我把代码贴出来让大家看看。
    SQL code
    ----------------第一个存储过程----------------- CREATE PROCEDURE TransProc_1 @PriKey INT, @CharCol CHAR(3),@error_out int output AS BEGIN TRANSACTION InProc_1 INSERT INTO TestTrans VALUES (@PriKey, @CharCol) INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol) set @error_out=@@error COMMIT TRANSACTION InProc_1; GO --------------第二个存储过程------------------- CREATE PROCEDURE TransProc_2 @PriKey INT, @CharCol CHAR(3), @error_out int output AS BEGIN TRANSACTION InProc INSERT INTO TestTrans VALUES (@PriKey, @CharCol) INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol) set @error_out=@@error COMMIT TRANSACTION InProc; GO --------------第叁个存储过程------------------- CREATE PROCEDURE TransProc_3 @PriKey INT, @CharCol CHAR(3), @error_out int output AS BEGIN TRANSACTION InProc INSERT INTO TestTrans VALUES (@PriKey, @CharCol) INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol) set @error_out=@@error COMMIT TRANSACTION InProc; GO --------------------------------- BEGIN TRANSACTION OutOfProc; DECLARE @ERROR INT; --依次调用这些存储过程 EXEC TransProc_1 10, 'aaa',@error_out=@ERROR output EXEC TransProc_2 20, 'ccc',@error_out=@ERROR output EXEC TransProc_3 30, 'ccc',@error_out=@ERROR output --打印错误号 print(@ERROR) IF ( @ERROR <= 0 ) BEGIN PRINT('提交事物') COMMIT TRANSACTION OutOfProc; END ELSE BEGIN PRINT('事物回滚') ROLLBACK TRANSACTION OutOfProc; END GO


    上面的代码运行肯定是不行的,不能达到我想要的效果,请问有什么方法可以解决我现在的问题呢?
    ============================================================================
    展开全文
  • 只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。 函数限制比较多,如不能用临时表,只能用表...

     

                                           存储过程和函数具体的区别:

    核心提示:本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。

     

        函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少。

        1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

        2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。

        3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数

           可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面

        4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在

           procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

    Procedure cache:中保存的是执行计划,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

     

        存储过程:可以使得对的管理、以及显示关于及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

       可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点

        (1)功能强大,限制少。

        (2)可以在单个存储过程中执行一系列 SQL 语句。

        (3)可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

        (4)存储过程在创建时即在上进行编译,所以执行起来比单个 SQL 语句快。

        (5)可以有多个返回值,即多个输出参数,并且可以使用SELECT返回结果集。

     

        函数:是由一个或多个 SQL 语句组成的子程序,可用于封装代码以便重新使用。自定义函数诸多限制,有许多语句不能使用,许多功能不能实现。函数可以直接引用返回值,用表变量返回记录集。但是,用户定义函数不能用于执行一组修改全局数据库状态的操作。 

    转自(http://blog.sina.com.cn/s/blog_48a45b950100ip4o.html)

     

    1.                                              事务
           1、什么是事务
                事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行
        2、事务的4个属性
                (1)、原子性(Atomicity):事务是一个完整的操作,事务个元素不可分
                (2)、一致性(Consistency):当事务完成时,数据必须处于一致状态
                (3)、隔离性(Isolation):对数据进行修改的所有并发事务时彼此隔离的,这表明事务必须时独立的,它不应该以任何方式依赖于或影响其他事务
                (4)、持久性(Durability):事务完成后,它对于系统的影响是永久性的
          3、创建事务的语法:
               --开始事务--
               begin transaction
                   --定义变量,累计事务执行过程中的错误--
            declare @errorSum int
                   set @errorSum=0      --初始化为0,即无错误
            --增删改操作---
            set  @errorSum = @errorSum +@@error   --累计是否有错误
            ........
        
            --根据是否有错误,确定事务是提交还是撤销--
            if(@errorSum=0)
                        commit transaction    --提交事务
            else 
                        rollback transaction   --撤销事务
            
            注意:变量@errorSum只对增删改进行操作,查询并不需要
            
      
       4、什么时候使用事务
           当一个操作由多个增删改组成的时候,则应用事务
      
                                                            索引
      
          1、什么是索引
             它是SQL Server编排数据的内部方法,为SQL Server提供一种方法来编排查询数据的路径,相当于字典里的目录
          2、索引的分类
                 (1)、唯一索引:唯一索引不允许两行具有相同的索引值
                (2)、主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型         
                (3)、聚集索引:  表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能由一个
                (4)、非聚集索引:非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以是多个,小于249个
           3、创建索引
                语法:
                create [unique] [clustered | nonclustered] index index_name
                    on table_name (column_name[,column_name]....)
                     [
                          fillfactor=x
                  ]
      
                 unique指定唯一索引,可选
               clustered、nonclustered指定是聚集索引还是非聚集索引,可选
               fillfactor表示填充因子,指定一个0~100的值,该值指示索引页填满的空间所占的百分比
           
              示例:
                 use stuDB
                 go
                 /*--检测是否存在该索引(索引存放在系统表sysindexes中)--*/
                if exists(select name from sysindexes
                               where name='ix_stumarks_writtenexam')
                      drop index  stumarks.ix_stumarks_writtenexam     --删除索引
               /*--笔试列创建非聚集索引:填充因子为30%--*/
               create nonclustered index ix_stumarks_writtenexam
                on stumarks(writtenexam)
                with  fillfactor=30
                go
      
            3、应该创建索引和不应该创建索引
               应该创建索引:
                   经常以这个列进行查询
                   经常以这个列进行排序
               不应该创建索引:
                  表的数据量小时,不应创建(会先查索引页,然后再表)
                  当某列的值经常发生变更(修改数据会影响到索引页)
                  当该列的值比较单一的情况(比如该列的值为性别 男和女)
                                                    视图
            1、什么是视图
                 视图是另一种查看数据库中一个或多个表中的数据的方法,视图是一种虚拟表
            2、语法
                 create view view_name
                  as <select语句>
                 注意:视图可以对表进行增删改查, 但建议不对其使用增删改,多用来进行查询
    2. 转自(http://blog.csdn.net/flanet/article/details/7595907)

    转载于:https://www.cnblogs.com/whytohow/p/4761912.html

    展开全文
  • mysql存储过程

    2019-01-22 14:40:22
    存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。 存储过程的优点 增强SQL语句的功能和灵活性 实现较快的执行速度 减少网络流量 IN:表示该参数的值必须在调用存储过程时指定 ...

    更多文章欢迎访问个人博客 www.herobin.top

    在这里插入图片描述

    存储过程

    存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。

    存储过程的优点

    • 增强SQL语句的功能和灵活性
    • 实现较快的执行速度
    • 减少网络流量

    在这里插入图片描述

    • IN:表示该参数的值必须在调用存储过程时指定
    • OUT:表示该参数的值可以被存储过程改变,并且可以返回。
    • INOUT:表示该参数的调用时指定,并且可以被改变和返回。

    在这里插入图片描述

    在这里插入图片描述

    存储引擎

    MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎。

    每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

    在这里插入图片描述

    并发控制

    当多个连接对记录进行修改时保证数据的一致性和完整性。

    在这里插入图片描述

    在这里插入图片描述

    事物

    在这里插入图片描述

    在这里插入图片描述

    外键:是保证数据一致性的策略。

    索引:是对数据表中一列或多列的值进行排序的一种结构。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 存储过程❗️ 函数❗️ 流程控制结构❗️ 事物:绑定条sql语句,要么都成功,要么都失败 ()隐示事物 例如:insert、update、delete (二)显示事物:和后端语言配合使用 防止隐示事物先提交了,需要先添加...

    事物
    视图
    变量❗️
    存储过程❗️
    函数❗️
    流程控制结构❗️

    事物:绑定多条sql语句,要么都成功,要么都失败

    (一)隐示事物
    例如:insert、update、delete
    (二)显示事物:和后端语言配合使用

    1. 防止隐示事物先提交了,需要先添加取消事物的步骤
    2. 提交和回滚只能执行一个,如果是回滚的话, 相当于没执行
    3. 和后端语言配合使用
    //步骤1:取消事物
    set autocommit = 0
    
    //步骤2:开启事物
    start  transaction
    
    //步骤3:编写sql命令,加断点
    select * from;
    savepoint     自定义断点名
    rollback to   自定义断点名
    select * from;
    
    //步骤4:提交
    commit;
    
    //步骤4:回滚
    rollback;
    

    (三)隔离级别:解决数据库并发操作时的脏读等相关问题(图:xmind)

    //数据库并发问题:脏读,不可重复读,幻读 
    //查看当前隔离级别
    select @@tx_isolation
    

    视图:临时表,相当于把sql命令保存起来,后期重复用

    1. 只用于查看,此处视图相似与函数,但执行函数在[存储过程]中体现
    2. 存储在可视化图形中的视图中
    3. 只保存sql逻辑, 并不对实际的数据库进行操作,不会保存查询结果
    4. 一般情况下 对视图内的数据进行增删改查,不影响原始表
    5. 特别简单的sql命令可以影响原始表(例如不能有关键字:分组,union等)
    //1.使用视图
    select 字段 from 视图名 where 查询条件
    
    //2.创建视图
    create view  视图名
    as 完整的查询语句
    
    //3.删除视图
    drop view 视图名1,视图名2
    
    //4.修改视图方式1
    create or replace view 视图名
    as 完整的查询语句
    
    //4.修改视图方式2
    alter view 视图名
    as 完整的查询语句
    
    //5.查看视图
    desc 视图名
    show create view 视图名  //不常用,比较全
    

    变量❗️

    存储过程 ❗️

    函数❗️

    流程控制结构❗️

    展开全文
  • 视图: 是一个虚拟表,其内容由查询定义; 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系。 2. 视图是由基本表(实表)产生的表(虚表)。 3. 视图的建立和删除不影响基本...
  • 视图:是一个虚报表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。 视图有如下特点:  1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系;  2.视图是由基本表(实...
  • 触发器与存储过程的区别

    千次阅读 热门讨论 2015-07-20 15:18:23
    看完牛腩前18集,就发现用存储过程和触发器真的很棒棒哒!那么到底什么时候用存储过程,什么时候用触发器呢?... 功,这个存储过程才执行。 触发器:是在对表进行插入、更新或删除操作时自动执行的存储过程,触
  • 视图是有一张表或张表的查询结果构成的一张虚拟表,本质保存一个 sql 语句在data文件里,当你调用它的时候就会执行这段sql语句.如果对视图的记录内容进行修改原本的数据记录也会被修改,反之亦然. 2为什么使用视图...
  • mysql常用的存储过程

    2018-03-10 15:15:18
    mysql常用的存储过程InnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。InnoDB主要特性有:1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力...
  • 视图:是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点;  1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系。  2. 视图是由基本表(实表)...
  • 欢迎来到我的第一个存储库,以及我在GitHub中的第一个网站(以及我最喜欢的存储库)。 :clipboard:指数 :closed_book:介绍 该存储库不是我创建的第一个存储库。我创建了第一个用来存储使用Unity创建的游戏的游戏,...
  • 求助大家一个关于系统改造的问题,多数的企业级应用多数的业务处理都是由存储过程进行处理的,如何能把这些存储过程改到用分布式的某种计算框架进行计算呢,存储过程主要是方便不用把数据取出来再放进去,如果在...
  • *在项目中,遇到这样的一个问题,当某一模块需要插入,更新一批大的数据量时, *此处大的含义是:更新到的数据记录比较 *用ibatis实现一条一条的插入,更新,如此循环下去。速度很慢 *分析: * 这些操作有个...
  • 在PHP同一事务里调用MYSQL的存储过程后再次执行另外的一个或多个命令(或者在同一事物里执行多个存储过程),如果使用mysqli的query方法获得结果,将获得一个错误:Commands out of sync; you can't run this command ...
  • 视图:是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系。 2. 视图是由基本表(实表)...
  • 视图:是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系。 2. 视图是由基本表(实表)...
  • 在PHP同一事物里调用MYSQL的存储过程后再次执行另外的一个或多个命令(或者在同一事物里执行多个存储过程),如果使用mysqli的query方法获得结果,将获得一个错误:Commands out of sync; you can't run this command ...
  • *在项目中,遇到这样的一个问题,当某一模块需要插入,更新一批大的数据量时, *此处大的含义是:更新到的数据记录比较 *用ibatis实现一条一条的插入,更新,如此循环下去。速度很慢 *分析: * 这些操作有...
  • 什么是事务: 一个事务包含多个操作,在mysql数据库中其实就是对数据库的一组操作,可以有一条或多条sql语句组成,同一个 事务具备同步的操作特点. (也就是要么都执行,要么都不执行) 事物的目的:事务会把...
  • 事物相关的另外一个比较重要的概念就是隔离级别。怎么理解隔离级别呢?主要从线程并发读取数据时的正确性角度出发。先来说明一下什么是脏读、不可重复读、和幻读。理解这些概念后对理解隔离级别很有帮助。所谓脏...
  • 在PHP同一事物里调用MYSQL的存储过程后再次执行另外的一个或多个命令(或者在同一事物里执行多个存储过程),如果使用mysqli的query方法获得结果,将获得一个错误:Commands out of sync; you can't run this command ...
  • 你想要是要处理很数据,全部交由java去处理的时候,从数据库查出来,是不是要时间?从数据库服务器传输到应用服务器是不是要时间?...将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 228
精华内容 91
关键字:

多个存储过程一个事物