Java程序员从笨鸟到菜鸟之(九)——数据库有关知识补充(事务、视图、索引、存储过程)
?
一:事务
首先看一下什么是事务:
?通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。?
然后看一下事务要遵循的ISO/IEC所制定的ACID原则:
ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
1.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
2.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
3.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
4.持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。?
看一下一些准备知识:
1.T-SQL使用下列语句来管理事务:
开始事务:BEGIN?TRANSACTION
提交事务:COMMIT?TRANSACTION
回滚(撤销)事务:ROLLBACK?TRANSACTION
一旦事务提交或回滚,则事务结束。
2.判断某条语句执行是否出错:
使用全局变量@@ERROR
@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计
????????????如:?SET?@errorSum=@errorSum+@@error
了解一下事务的分类:
显示事务:用BEGIN?TRANSACTION明确指定事务的开始,这是最常用的事务类型
隐性事务:通过设置SET?IMPLICIT_TRANSACTIONS?ON?语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个?T-SQL?语句又将启动一个新事务
自动提交事务:这是?SQL?Server?的默认模式,它将每条单独的?T-SQL?语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚
使用事务解决经典银行转账事务问题
T-SQL语句:
?
?
Java
使用T-SQL语句创建索引的语法:
CREATE?[UNIQUE]?[CLUSTERED|NONCLUSTERED]??
????INDEX???index_name
?????ON?table_name?(column_name…)
??????[WITH?FILLFACTOR=x]
注:UNIQUE表示唯一索引,可选
CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索???????????引,可选
FILLFACTOR表示填充因子,指定一个0到100之间的值,
该值指示索引页填满的空间所占的百分比
创建索引示例:
使用T-SQL语句创建视图的语法:
CREATE?VIEW?view_name??
???AS
????<select语句>
示例:创建方便教员查看成绩的视图
?
定义存储过程的语法
????CREATE??PROC[EDURE]??存储过程名?
??????????????@参数1??数据类型?=?默认值?OUTPUT,
??????????????……?,
?????????????@参数n??数据类型?=?默认值?OUTPUT
?????????????AS
????????????SQL语句
????GO
和Java语言的方法一样,参数可选
参数分为输入参数、输出参数?
输入参数允许有默认值
先给出一个不带输入参数的存储过程的例子:
---调用存储过程----*/DECLARE?@sum?int???EXEC?proc_stu?@sum?OUTPUT?,64??//调用时必须带OUTPUT关键字?,返回结果将存放在变量@sum中?????print?'--------------------------------------------------'IF?@sum>=3?????//后续语句引用返回结果??print?'未通过人数:'+convert(varchar(5),@sum)+?'人,?????????超过60%,及格分数线还应下调'ELSE??print?'未通过人数:'+convert(varchar(5),@sum)+?'人,????????已控制在60%以下,及格分数线适中'GO???