这个方法中的所有语句只有全部执行才能正确完

2019-09-08 作者:数据库   |   浏览(156)

需求:查询表dbo.Message,每页10条,查询第2页

Sql2012及以上版本的分页比较简单:

SQL Server 表的管理_关于事务操作的详解(案例代码)

create proc Usp_getDatabyPage
@PageSize int,
@PageIndex int,
@PageCount int output
as
begin
select * from
(
select
*,
Rn=row_number() over(order by Tid asc)
from MyTable1
)as TblMyTable1
where TblMyTable1.Rn between (@PageIndex-1)*@PageSize 1 and @PageIndex*@PageSize

1:TOP()

CREATE PROCEDURE usp_pagingin2012
@Start     INT=0, 
@PageLimit INT=10
AS
BEGIN
SELECT * FROM 表名
ORDER  BY 列名
OFFSET @Start ROW 开始位置
FETCH NEXT @PageLimit ROWS ONLY 
END

1、概念

事务(transaction):

  是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能。即要么全部执行,要么全部不执行。

declare @rdCount int
select @rdCount=count(*) from MyTable1
set @PageCount =ceiling(@rdCount/(@PageSize*1.0))
end

SELECT TOP(20) * FROM  dbo.Message WHERE Code NOT IN
(SELECT TOP(10) Code FROM dbo.Message)

Sql2005-2008分页稍微复杂一点:

2、事务的acid属性:

  • 原子性:事务处理语句是一个整体,不可分割。Atomicity--A

  • 一致性:事务处理前后数据库前后状态要一致。Consistency--C

  • 分割性(隔离性):多个事务并发处理互不干扰。Isolation--I

  • 持久性:事务处理完成后,数据库的变化将不会再改变。Durability--D

注意:在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

2:BETWEEN *  AND *  ,  Row_Number() OVER(ORDER BY *) AS rowNum 

CREATE PROCEDURE usp_paging
@PageNumber INT=1, 
@PageSize   INT=10
AS 
BEGIN
WITH ctepaging 
     AS (SELECT *,
                Row_number() OVER(ORDER BY 列名) AS rownum 
         FROM 表名) 
SELECT * 
FROM   ctepaging 
WHERE  rownum BETWEEN ( @PageNumber - 1 ) * @PageSize   1 AND
@PageNumber * @PageSize
END

3、MySQL事务隔离级别

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

 

SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a FROM  dbo.Message 
SELECT * FROM #a WHERE rowNum BETWEEN 11 AND 20
DROP TABLE #a;

 

 4、SQL的事务模式

事务分类:

  1. 显式事务:用begin transaction明确指定事务的开始。
  2. 隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
  3. 自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。

或者: 

 4.1显示事务

 T-SQL中管理事务的语句:
  1 开始事务: begin transaction
  2 提交事务:commit transaction
  3 回滚事务: rollback transaction

 案例代码:

begin transaction
insert into dept  values(100,'陈浩','男',19)
save transaction sp1;
insert into dept  values(101,'erer','男',9)
rollback transaction sp1;
commit transaction;
--执行过程中插入第二条语句后,事务回滚到第二条数据之前,也就是第二条动作被撤销后,
--最后提交事务后,表中只有一条数据。
SELECT * FROM (
                SELECT  *, ROW_NUMBER() OVER (ORDER BY CreateTime DESC) AS 'RowNumberForSplit'
                FROM  office.Conference 
                WHERE  1=1) temp 
WHERE RowNumberForSplit BETWEEN 1 AND 10

4.2隐式事务

开启关闭隐式事务的方法:

SET IMPLICIT_TRANSACTIONS ON/OFF;

set implicit_transactions on;
insert into dept values(101,'erer','男',9)
rollbac

本文由小鱼儿玄机30码发布于数据库,转载请注明出处:这个方法中的所有语句只有全部执行才能正确完

关键词: 小鱼儿玄机30码