㈠ 怎么才能使这个存储过程具有原子性
一、存储过程中使用事务的简单语法在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: Create Procere MyProcere ( @Param1 nvarchar(10), @param2 nvarchar(10) ) AS BeginSet NOCOUNT ON; Set XACT_ABORT ON; Begin Tran Delete from table1 where name=’abc’; Insert into table2 values(value1,value2,value3); Commit Tran End说明: 1 、使用存储过程执行事物,需要开启XACT_ABORT参数(默认值为Off),将该参数设置为On,表示当执行事务时,如果出错,会将transcation设置为uncommittable状态,那么在语句块批处理结束后将回滚所有操作;如果该参数设置为Off,表示当执行事务时,如果出错,出错的语句将不会执行,其他正确的操作继续执行。 2、当SET NOCOUNT 为 ON 时,不返回计数(计数表示受 Transact-SQL 语句影响的行数,例如在Sql server查询分析器中执行一个delete操作后,下方窗口会提示(3)Rows Affected)。当 SET NOCOUNT 为 OFF 时,返回...
㈡ 一个存储过程中更新多个表可以用一个COMMIT吗
技术上是可以的,原则建议。
一般情况下事务有原子性,如果要一起执行的语句放在事务中提交,达到这些语句的“同步”,要不都不执行,要不都执行。显然,这里是可以放在一起的让其执行的。
但语句中很明显涉及了更新插入等相关操作,此进需要在事务上加排他锁,这样会导致数据库的并发性下降,所以对于事务我们一般会选用的是执行较快的几组语句入在一起的。一般事务较为短小,至少执行速 度会很快。
假定,我是说假定,如果 有一个事务需要执行的时间是一天,由于事务中有更新语句,所以事务加了排他锁,其他事务与程序只有等待。这样可想你的数据库不能再接受任何外部的调用了。也就是说如果你的程序执行过长,最好不要使用事务。
所以在事务语句中是不允许进行数据库的压缩,创建,等耗时较高的操作的,这是SQL中规定的!
㈢ 关于存储过程与事务
这两个概念可以说是两个范畴的概念,事务是数据库操作范畴的概念,保证数据库数据的完整性和一致性;存储过程是高级程序设计中模块化设计思想的重要内容。
事务是包含一组修改(插入、更新和删除)的工作的逻辑单位。事务的操作要么被保存到数据库commit,要么回滚rollback,事务中的所有修改要么全部提交,要么什么也不做,这样保证了数据库中数据的完整性和一致性。
数据库操作中为了完成一个完整的数据库任务,从而引进高级程序的设计要素。过程就是高级程序设计语言中的模块概念,将一些内部联系的命令组成一个个过程,通过参数在过程间传递数据来完成一个完整的数据库任务,这就是模块化设计思想的重要内容。
有的时候可以把一个过程看作一个事务,但是有的过程运行过程中因为满足某些条件而从过程中跳出,这时就不能把过程看作事务;反之,一个事务可能是一个过程,也可能一个事务中包含对一个或多个过程的调用。
二者概念所述的范畴不同,在数据库中,是相互联系相互区别的;而且两者都是具体的,不是抽象的,因为都可以拿出一段代码,说它是事务或是存储过程。
以上是个人理解,希望对你有所帮助。
㈣ sql server 存储过程
在执行存储过程时,我们常遇到执行超时的情况。如果是因为要处理的数据过多,修改流程复杂等原因的话,如以用以下方法解决:在存储过程的处理工作中加上事务管理:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --->要这行
BEGIN TRAN /* 这里是程序处理代码段*/commit transaction
QuitWithRollback:
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION
END 以下是事务相关的知识:BEGIN TRANSACTION--开始事务DECLARE @errorSun INT --定义错误计数器SET @errorSun=0 --没错为0UPDATE a SET id=232 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句SET @errorSun=@errorSun+@@ERROR --累计是否有错IF @errorSun<>0 BEGIN PRINT '有错误,回滚'ROLLBACK TRANSACTION--事务回滚语句END ELSE BEGIN PRINT '成功,提交'COMMIT TRANSACTION--事务提交语句END1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。2.事务的语句开始事物:BEGIN TRANSACTION 提交事物:COMMIT TRANSACTION 回滚事务:ROLLBACK TRANSACTION3.事务的4个属性①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库4.事务的保存点 SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置 ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点 二事例 所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态。包括四个特性:1、原子性 就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留2、一致性 事务完成或者撤销后,都应该处于一致的状态3、隔离性 多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时, 不合理的存取和不完整的读取数据4、持久性 事务提交以后,所做的工作就被永久的保存下来 示例:创建一个存储过程,向两个表中同时插入数据Create proc RegisterUser(@usrName varchar(30),@usrPasswd varchar(30),@age int,@sex varchar(10),@PhoneNum varchar(20),@Address varchar(50) )as beginbegin traninsert into userinfo(userName,userPasswd)values(@usrName,@usrPasswd)if @@error<>0begin rollback tranreturn -1endinsert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)if @@error<>0begin rollback tranreturn -1endcommit tranreturn 0end事务的分类按事务的启动与执行方式,可以将事务分为3类:显示事务 也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务自动提交事务默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。隐性事务当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。一、显示事务通过begin transacton、commit transaction、commit work、rollback transaction或rollback work等语句完成。1、启动事务格式:begin tran 事务名或变量 with mark 描述2、结束事务格式:commit tran 事务名或变量 (事务名与begin tran中的事务名一致或commit work 但此没有参数3、回滚事务 rollback tran 事务名或变量 | savepoint_name | savepoint_variable 或rollback work 说明:清除自事务的起点或到某个保存点所做的所有数据修改4、在事务内设置保存点格式:save tran savepoint_name | savepoint_variable 示例:use bookdbgobegin tran mytraninsert into book values(9,"windows2000',1,22,'出版社')save tran mysavedelete book where book_id=9rollback tran mysavecommit trangoselect * from bookgo可以知道,上面的语句执行后,在book中插入了一笔记录,而并没有删除。因为使用rollback tran mysave 语句将操作回滚到了删除前的保存点处。5、标记事务格式:with mark 例:使用数据库标记将日志恢复到预定义时间点的语句 在事务日志中置入一个标记。请注意,被标记的事务至少须提交一个更新,以标记该日志。BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法备份事务日志。BACKUP LOG pubs TO DISK='C:/Backups/Fullbackup.bak' WITH INIT 现在您可以将数据库恢复至日志标记点。首先恢复数据库,并使其为接受日志恢复做好准备。 RESTORE DATABASE pubs FROM DISK=N'C:/Backups/Fullbackup.bak' WITH NORECOVERY 现在将日志恢复至包含该标记的时间点,并使其可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。 RESTORE LOG pubs FROM DISK=N'C:/Backups/Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00'5、不能用于事务的操作创建数据库 create database 修改数据库 alter database 删除数据库 drop database 恢复数据库 restore database 加载数据库 load database 备份日志文件 backup log 恢复日志文件 restore log 更新统计数据 update statitics 授权操作 grant 复制事务日志 mp tran 磁盘初始化 disk init 更新使用sp_configure后的系统配置 reconfigure二、自动提交事务 sql连接在begin tran 语句启动显式事务,或隐性事务模式设置为打开之前,将以自动提交模式进行操作。当提交或回滚显式事务,或者关闭隐性事务模式时,将返回到自动提交模式。示例: 由于编译错误,使得三个insert都没执行use testgocreate table testback(cola int primary key ,colb char(3))goinsert into testback values(1,'aaa')insert into testback values(2,'bbb')insert into testback value(3,'ccc')goselect * from testbackgo 没有任何结果返回三、隐式事务通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句又将启动一个新事务。当有大量的DDL 和DML命令执行时会自动开始,并一直保持到用户明确提交为止,切换隐式事务可以用SET IMPLICIT_TRANSACTIONS 为连接设置隐性事务模式.当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。当设置为 OFF 时,则使连接返回到自动提交事务模式 语句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用显式与隐式事务。它使用@@tracount函数演示打开的事务与关闭的事务:use testgoset nocount oncreate table t1(a int)goinsert into t1 values(1)goprint '使用显式事务'begin traninsert into t1 values(2)print '事务外的事务数目:'+cast(@@trancount as char(5))commint tranprint '事务外的事务数目:'+cast(@@trancount as char(5))goprintgoset implicit_transactions on go print '使用隐式事务'goinsert into t1 values*4)print'事务内的事务数目:'+cast(@@trancount as char(5))commint tran print'事务外的事务数目:'+cast(@@trancount as char(5))go执行结果: 使用显示事务事务内的事务数目:2 事务外的事务数目:1 使用隐式事务事务内的事务数目:1 事务外的事务数目:0四、分布式事务跨越两个或多个数据库的单个sql server中的事务就是分布式事务。与本地事务区别:必须由事务管理器管理,以尽量避免出现因网络故障而导致一个事务由某些资源管理器成功提交,但由另一些资源管理器回滚的情况。 sql server 可以由DTc microsoft distributed transaction coordinator 来支持处理分布式事务,可以使用 BEgin distributed transaction 命令启动一个分布式事务处理 分二阶段:A 准备阶段 B 提交阶段执行教程:1、sql 脚本或应用程序连接执行启动分布式事务的sql语句2、执行该语句的sql在为事务中的主控服务器3、脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。4、当执行了分布式查询或远程过程调用后,主控服务器将自动调用msdtc以便登记分布式事务中链接的服务器和远程服务器5、当脚本或应用程序发出commit或rollback语句时,主控sql将调用msdtc管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
㈤ MySql 的存储过程和函数锁定问题。
没必要这样加锁吧,存储过程本身就是原子性的。
如果非要这样,可以建一个表,一个标志字段,先检查该字段是否为0,0代表没加锁,然后函数开始时把它设为1,完成后设回0。
㈥ SQL的存储过程和事务这两者一般在什么情况下使用
存储过程(主要有插入记录、删除记录、修改记录等)主要用于在程序中调用,这程调用在网络应用程序中可以减少网络传输流量,提高程序执行效率。
以下是我以前在网上找的:
事务有四个特性
事务的原子性、一致性、独立性及持久性
事务的原子性是指一个事务要么全部执行,要么不执行
事务的一致性是指事务的运行并不改变数据库中数据的一致性.
事务的独立性是指两个以上的事务不会出现交错执行的状态.
事务的持久性是指事务运行成功以后,就系统的更新是永久的.不会无
㈦ sql建立存储过程的作用是什么
就是把一些数据处理和逻辑性的问题作为一段程序放到数据库端来处理,这样处理的可以提高效率,不用每次来处理都要编译了,也提高了原子性,安全性和事务一致性。
㈧ 业务档案包括哪些
档案工作,有狭义解释和广义解释之分。从狭义上说,档案工作是指管理档案和提供档案信息为各项社会实践服务的一项专门业务。从广义上说,包括档案事业管理工作、档案室工作、档案馆工作、档案专业教育、档案科学技术研究、档案宣传出版、档案国际交往活动等。
(1)档案的收集。是档案室和档案馆接收和征集档案的总称。包括档案室对本单位归档案卷的接收,档案馆对现行机关或撤销机关移交档案的接收、对社会人士捐赠档案的接收、对分散在社会上的珍贵档案的征集。档案收集的任务,是解决档案分散状况与保管、利用档案要求合理集中的矛盾,只有“化分散为集中”,才便于保管和利用。
(2)档案的整理。是将零散文件分门别类地组成档案有机体的一项工作。包括分类、立卷、卷内文件排列、案卷封面的编制、案卷的排列、案卷目录的编制等一系列工作程序。档案整理的任务,是解决档案零散状态与保管、利用档案要求系统化的矛盾,只有“化零散为系统”,使档案由无序状态转化为有序状态,才便于保管和利用。
(3)档案的鉴定。指档案保存价值的鉴定,是鉴别档案价值的大小、确定档案保管期限、决定档案保存与销毁的一项工作。档案鉴定的任务,是解决档案的量大质杂与保管、利用档案要求优质化的矛盾,只有“化质杂为优质”,淘汰档案中的无用部分,存留其有用部分,才便于保管利用。
(4)档案的保管。是保护档案的安全、延长档案寿命的一项工作。包括档案保护技术工作和库房管理工作。档案保管的任务,是解决档案的易损性与社会要求长远保管和利用档案的矛盾,只有最大限度地增长档案原件的寿命,或者通过缩微复制保护档案信息,使之久传,才能保证社会长远利用。
(5)档案的编目。又称档案检索。是对档案内容和形式进行分析、选择、浓缩和记录,并按照一定次序编排成为各种目录的工作过程。包括馆藏目录、检索性目录和介绍性目录的编制。编目工作的任务,是解决档案数量庞大、内容复杂和利用者对档案信息特定需求之间的矛盾。各种档案目录可帮助利用者了解馆藏档案的内容和成分,检索到所需要的档案信息,也用于档案馆(室)的档案管理。
(6)档案的编研。指档案馆(室)的编辑与研究工作。包括编辑档案文献汇编、编写综合参考资料以及参加编史修志等。其主要任务是:按照一定的选题,将重要的档案编辑成为文献出版物,如档案史料汇编或丛编,重要文件汇编或政策法令汇编,以及科学技术资料汇编等;或者将档案信息浓缩化、系统化、编成大事记、组织沿革、基础数字汇编、专题概要等,便于不同利用对象的利用。
(7)档案的提供利用。亦称档案信息的输出。是通过多种信息传输渠道和媒介,将档案信息传递给利用者的工作过程。它是档案工作为各项社会实践服务的直接体现,它把档案的作用由可能性变成现实性,通过它可以把档案工作搞活,把档案这种“死材料”变成“活材料”,在各项社会实践中发挥作用。
(8)档案的统计。它以表格数字形式全面地反映档案、档案工作和档案事业状况。包括档案的收进、移出、整理、鉴定、保管、利用情况,以及档案机构、人员、经费、设备的登记和统计。档案统计是取得反馈信息、对档案工作进行监督的重要手段之一,是档案部门了解情况、总结经验、进行决策、制订计划的依据。
㈨ 一些SQL的试题
1.应用程序
2.实体完整性
3.distince
4.
5.create Nonclustered index IDX_authors on authors(州名列,城市名列)
6.创建表
7.select 列名 from 表名
8.sum()
9.top
10.alter procere
11.ltrim()
12.declare @变量名 数据类型
13.where
14.from
15.order by
16.cast(表达式 as 数据类型)
17.count()
18.drop procere 存储过程名
19.创建数据库
20.价格大于15美元的所有数据
21.数据库
22.rollback
23.
24.服务管理器
25.
26.数据冗余(备份)
27.3
28.数据库
29.应用程序
30.drop table
33.操作系统
权限
1.
2.是并发控制的单位,是用户定义的一个操作序列,具有原子性,一致性,隔离性,持续性四个特性。
3.共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁.
获准共享锁的事务只能读数据,不能修改数据。
4.
5.
1.存储过程可以使得程序执行效率更高、安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性问题,如:sql注入
2.建立过程不会很耗系统资源,因为过程只是在调用才执行。
6.聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。
7.
8.是并发控制的单位,是用户定义的一个操作序列,具有原子性,一致性,隔离性,持续性四个特性。
BEGIN TRAN [Tran_name]开始事务
COMMIT TRAN [Tran_name]事务完成提交事务
9.存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。
10.增量备份:是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。
12.原子性,要么都做,要么不做。
13.排它锁若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。
14.分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。
15.
17同2,18同8
19.DBMS数据库管理系统,DBA数据库管理员
20.1对1,一个学生对应一个学号
1对多 一个学生对应多门功课
多对多 商品与厂商
(备注:只能做这么多了,很长时间没看书了,有时间可以看看<数据库系统概论>萨师煊 王珊 高等教育出版社,很不错的一本书哦。上有你要的答案,特别是简答题。)
21.
22.数据库完整性,对数据库提出的某种约束条件或规则。
分三种:实体完整性,参照完整性,用户自定义完整性
23.
24.原则如下:
●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。
●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。
26。聚集索引确定表中数据的物理顺序。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引)
非聚集索引一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。一个表可以有多个聚集索引