1.事务主要用来保证数据的合理性和并发处理的能力,利用事务可以实现多个用户对共享资源的同时访问
2.事务和线程的关系
事务也是通过锁来解决很多问题
线程同步就是通过锁来解决的synchronized
3.T-SQL使用下列语句来管理事务
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚(撤销) 事务:ROLLBACK TRANSACTION
4.事务的特性(ACID)
* 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
* 一致性(Consistency):事务前后数据的完整性必须保持一致。
* 隔离性(Isolation):事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务间数据要相互隔离。
*持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
5.事务的三种运行模式:
自动提交事务
显示事务(以BEGIN TRANSACTION显示开始,以COMMIT或ROLLBACK显示结束)
隐性事务
6,事务隔离性:
脏读:读到未提交数据
不可重复读:读到提交数据
虚读(幻读): 读到插入的数据
* 数据库共定义了四种隔离级别:
serializable:可避免脏读,不可重复读,需读情况的发生。(串行化)实际是单线程操作
repeatable read:可避免脏读,不可重复读情况的发生。(可重复读)mysql 的默认级别
read committed:可避免脏读情况的发生(读已提交) oracle默认级别
read uncommitted:最低级别,以上情况均无法保证
set transaction isolation level 设置事务隔离级别 如: set transaction isolation level read committed;
select @@tx_isolation查询当前事务隔离级别
代码操作流程:
set transaction isolation level read uncommitted; //设置安全级别
start transaction; //一个事务开始
select * from xxxtable;
。。。。。
commint; //一个事务结束
7. 存储过程 :
定义:
go
create proc 存储过程名
@参数
as
SQL语句1;
SQL语句 条件@参数;
go
调用存储过程:
EXECUTE(执行)语句用来调用存储过程
调用的语法:
EXEC 过程名【参数】 示例:EXEC proc_stu @参数=赋值
实例
go
create proc emp_dept
@sal decimal
as
select *
from emp
where sal>@sal;
select *
from dept;
go
exec emp_dept @sal=2000
8.触发器分类
按时间分类:1.After触发器(之后触发)2.instead of触发器(之前触发)
按功能分类:Delete触发器,insert触发器,update触发器
触发器的inserted和deleted表
if OBJECT_ID('t_transInfo_insert')is not null
drop trigger t_transInfo_insert
Greate trigger t_transInfo_insert
on sal_change
for insert
as
declare @empno int
declare @changesal decimal(7,2)
declare @tran_type nvarchar(20)
select @empno=empno,@changesal=changesal,@tran_type=tran_type
from inserted
if(@tran_type='增加')
update emp set sal=sal+@changesal //当sal是null时,对其加减,任为null,不知如何解决
where empno=@empno
else
update emp set sal=sal-@changesal
where empno=@empno
7.索引:优化查询
8.游标:分情况处理
9.一个操作时,会触发另一个操作
10.总结:假设每页显示n条记录,当前显示的是第m页
1.无排序要求
select top n*
from A
where A_id not in(select top (m-1)*n A_ID from A )
2.有排序要求
select top n*
from A
where A_id not in(select top (m-1)*n A_ID from A order by xx字段 desc/asc)
order by xx字段 desc/asc