数据库中的事务、存储过程和触发器的简单使用

 什么是事务(Transaction)
  指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)--也就是由多个sql语句组成,必须作为一个整体执行
  这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
  语法步骤:
  开始事务:BEGIN TRANSACTION
  事务提交:COMMIT TRANSACTION
  事务回滚:ROLLBACK TRANSACTION
  判断某条语句执行是否出错:
  全局变量@@ERROR;
  @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
  例:SET @errorSum=@errorSum+@@error
  存储过程---就像数据库中运行方法(函数)
  和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。
  前面学的if else/while/变量 等,都可以在存储过程中使用
  优点:
  执行速度更快
  允许模块化程序设计
  提高系统安全性
  减少网络流通量
  系统存储过程
  由系统定义,存放在master数据库中
  名称以“sp_”开头或”xp_”开头
  自定义存储过程
  由用户在自己的数据库中创建的存储过程
  系统存储过程
  说明
  sp_databases
  列出服务器上的所有数据库。
  sp_helpdb
  报告有关指定数据库或所有数据库的信息
  sp_renamedb
  更改数据库的名称
  sp_tables
  返回当前环境下可查询的对象的列表
  sp_columns
  回某个表列的信息
  sp_help
  查看某个表的所有信息
  sp_helpconstraint
  查看某个表的约束
  sp_helpindex
  查看某个表的索引
  sp_stored_procedures
  列出当前环境中的所有存储过程。  sp_password
  添加或修改登录帐户的密码。
  sp_helptext
  显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。
  定义存储过程的语法
  CREATE PROC[EDURE] 存储过程名
  @参数 数据类型 = 默认值 OUTPUT,
  @参数n 数据类型 = 默认值 OUTPUT
  AS
  SQL语句
  参数说明:
  参数可选
  参数分为输入参数、输出参数
  输入参数允许有默认值
  EXEC 过程名 [参数]
  触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。
  一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。
  触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。
  那究竟何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
  常见的触发器有三种:分别应用于Insert , Update , Delete 事件
  常用语法

CREATE TRIGGER triggerName ON Table
for UPDATE|INSERT|DELETE
AS
begin
…
end
  触发器-更新
CREATE TRIGGER testForFun ON dbo.Category
for UPDATE
AS
begin
select * from book
end
update Category set c_name = 'Android2' where c_id=3
  触发器-删除
CREATE TRIGGER testForDel ON dbo.Category
for delete
AS
begin
select * from book
end
delete Category set c_name = 'Android2' where c_id=3

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-28 16:09:59

数据库中的事务、存储过程和触发器的简单使用的相关文章

server-SQL Server 2008在多个数据库中创建同一个存储过程

问题描述 SQL Server 2008在多个数据库中创建同一个存储过程 十几个数据库,只有一个存储过程,我不想一个一个数据库去创建,有什么办法执行一遍之后十几个数据库都创建好这个存储过程 解决方案 你不如自己写个程序,里面可以设置数据库连接数组,挨个的通过代码自动创建存储过程 解决方案二: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx 解决方案

SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

原文:SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二:调用模板存储过程创建存储过程: 总结 扩展阅读 参考文献(References) 二.背景(Contexts) 在我的数据库服务器上,同一个实例

SQL 数据库中的事务

11.4.1 事务的由来使用DELETE 命令或UPDATE 命令对数据库进行更新时一次只能操作一个表,这会带来数据库的数据不一致的问题.例如:企业取消了后勤部,需要将'后勤部'从department表中删除,要修改department 表,而employee 表中的部门编号与后勤部相对应的员工也应删除.因此,两个表都需要修,改这种修改只能通过两条DELETE 语句进行.假设后勤部编号为'1012' 第一条DELETE 语句修改department 表delete from department

运用ASP调用数据库中视图及存储过程

存储过程|视图|数据|数据库 一.前言 ASP (Active Server Pages) 是服务器端的脚本编写环境,它由微软公司的IIS3.0以上版本支持.它可用来创建动态 Web 页或生成功能强大的 Web应用程序.ASP页是包括 HTML 标记.文本和脚本命令的文件.ASP页可调用ActiveX组件来执行任务,例如连接到数据库或进行商务计算.通过ASP,可为您的Web页添加交互内容或用HTML页构成整个Web应用程序,这些应用程序使用HTML页作为您的客户的界面. 二.ASP模型 浏览器从

MS SQL基础教程:SQL数据库中的事务

11.4.1 事务的由来 使用DELETE 命令或UPDATE 命令对数据库进行更新时一次只能操作一个表,这会带来数据库的数据不一致的问题.例如:企业取消了后勤部,需要将'后勤部'从department表中删除,要修改department 表,而employee 表中的部门编号与后勤部相对应的员工也应删除.因此,两个表都需要修,改这种修改只能通过两条DELETE 语句进行.假设后勤部编号为'1012' 第一条DELETE 语句修改department 表 delete from departme

oracle数据库中查看系统存储过程的方法_oracle

复制代码 代码如下: select line,text from dba_source where name='PRO_E_F_ORDER_STAT'; select object_name,object_type from dba_objects where object_type='PROCEDURE';

在Oracle数据库中同时更新两张表的简单方法_oracle

以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的 今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2.其中a2和b2是关联的,想把A中的字段a1更新成B中的b1 理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误.而且确实还有些小小细节没有注意到. 首先上测试数据 表1,ZZ_TEST1 表2,ZZ_TEST2 要把表一的text更新成表二的text1值,对应

通过系统数据库获取用户所有数据库中的视图、表、存储过程_MsSql

复制代码 代码如下: --设置sql 可以获取实例名称sp_configure 'xp_cmdshell' , 1;goreconfigure;go --获取实例名EXEC sys .xp_cmdshell 'sqlcmd -Lc' --获取所有数据库Select * FROM Master..SysDatabases order by Name --获取数据库所有表use yeekang ---数据库名称select * from sysobjects where   type = 'U' o

java调用2个数据库中的存储过程,连接池用的c3p0,当调用第二个数据库的存储过程时出错

问题描述 java调用2个数据库中的存储过程,连接池用的c3p0,当调用第二个数据库的存储过程时出错 我这个程序用了一个定时任务,连接池用的c3p0,然后dao层是调用的存储过程,调用的存储过程分布在2个数据库中.但是当程序执行的时候,先执行的那个数据库中的所有存储过程没问题,然后当执行到另外一个数据库中的存储过程时,调用这数据库中的存储过程就全部报错. 数据源: 调用存储过程: ! Config.getConfig(),是获取数据源: 报错信息就是:"xxx存储过程名"必须声明 如果