SQL事务/索引/游标/触发器/分页查询

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值