`
jackie9305
  • 浏览: 39112 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

视图,事务,索引的sql

阅读更多

/*索引
缺点:
 1、增加存储空间
 2、降低IDU操作的性能
优点:
 1、提升SELECT操作的性能

语法:
 create index ix_name
 on tblName(col_name)


==================================================================
  视图
适用范围
1、大表
2、经常查询的字段

不适用范围
1、小表
2、很少查询的字段
3、字段值为有限值


聚集索引:
 特点:会影响记录的物理排序
  只能有一个
  针对表创建主键时会自动增加聚集索引
 优点:会进一步提高查询性能

非聚集索引:可以有多个
 [默认]

代码重用:
  多条T-SQL语句需重用,则封装到存储过程中
  如果一条select 语句重用,则封装到视图中
=============================================================================
事务:一个业务逻辑包含多个步骤,要么全部执行所有步骤,要么全部不执行.


begin transaction :开始事务
rollback tran 回滚事务
commit transaction:提交事务

特性:ACID
原子性:不可分割
一致性:
隔离性:
持久性:

分类:
显示事务:以begin tran开头
隐式事务:省略begin tran,
自动提交事务:单条sql语句,本身就是一个事务

重点注意:
begin tran之后只能跟一次commit tran 或rollback tran
,不能同时既commit tran , 又rollback tran

不带 保存点 和 事务名称 的 ROLLBACK TRANSACTION 回滚到事务的起点。
嵌套事务时,该语句将所有内层事务回滚到最远的 BEGIN TRANSACTION 语句
*/

 

 

--图书信息表
create table tbl_book(
	book_id varchar(20) primary key ,--书的编号
	book_name varchar(20) ,--书名
	book_status bit --0表示已还,1表示已借
)

--借阅表
create table tbl_borrow
(
	borrow_id varchar(20) primary key, --借书编号
	book_id varchar(20) ,	--书的编号
	borrow_person varchar(20) ,	--借书人
	borrow_date datetime		--借书日期
)

delete from tbl_book
delete from tbl_borrow

insert into tbl_book
values('bk0001','红楼梦',0)
insert into tbl_borrow
values('js02','bk0001','张三','2009-03-10')

--因为表tbl_borrow中的借书人会经常被查询,请进行优化  
create index ix_tbl_borrow_borrowperson
on tbl_borrow(borrow_person)
--select * from tbl_book
--创建视图
create view v_book_borrow
as 
    select  borrow_id as 借书编号,    book_name as 书名, borrow_person as 借书人 ,borrow_date as 借书日期
     from tbl_book,tbl_borrow  where tbl_book.book_id=tbl_borrow.book_id
go
select * from v_book_borrow

/*三、借书业务
现有一笔借书记录,
编号为 'brw001',书的编号为'bk0001', 借书人为张三,日期为系统当前日期,
注1:借书时需修改图书的标识为已借
注2:如果该书已借则不能完成业务
*/

--EXISTS用于检查子查询是否至少会返回一行数据,空返回false
--select * from tbl_borrow
 begin transaction
     if(exists(select * from tbl_book where book_id='bk0001'and book_status='0'))
	begin 
	    insert into tbl_borrow values('brw001','bk0001','张三',getdate())
            update tbl_book set book_status='1' where book_id='bk0001'
	end

     if(exists(select * from tbl_book where book_id='bk0001'and book_status='1'))
       begin
		print '书本已经被借出,等归还后再借'
		rollback transaction
		return
	end
 commit transaction


/*
测试索引的效率
往表中插入20万条记录,判断有索引与无索引时的查询效率
*/


delete from tbl_stu_for_loop--删除表中数据
drop table tbl_stu_for_loop--删除表
create table tbl_stu_for_loop
(
	stu_id int 
	
)

declare @i int 

set @i=1

while(@i<=200000)
begin 
        insert into tbl_stu_for_loop values (@i)
        set @i=@i+1
end


--创建索引
create index ix_tbl
on tbl_stu_for_loop(stu_id)

drop index tbl_stu_for_loop.ix_tbl--删除索引


declare @beginTime datetime
set @beginTime=getdate()
select *from tbl_stu_for_loop
declare @endTime datetime
set @endTime=getdate()
select datediff(ms,@beginTime,@endTime) as '所需时间(毫秒)'


--------------------------------------------------------------------
--帐户表
create table tbAccount
(
	code varchar(20) primary key ,
	balance decimal(10,2) 
)

insert into tbAccount values('zs',2000) 
insert into tbAccount values('ls',5000) 

--delete from tbAccount
--select * from tbAccount

declare @from varchar(20)
declare @to varchar(20)

begin tran
	set @from='zs'
	set @to='ls'

	if(not exists(select * from tbAccount where code=@from))
	begin
		print '转出者不存在,转帐失败'
		return
	end

	if(not exists(select * from tbAccount where code=@to))
	begin
		print '转入者不存在, 转帐失败'
		return
	end

	update tbAccount
	set balance=balance-1000
	where code=@from
	waitfor delay '0:0:01'

	if((select balance from tbAccount where code=@from)<0)
	begin
		print '金额不足, 转帐失败'
		rollback tran
		return
	end

	update tbAccount
	set balance=balance+1000
	where code=@to

	print '转帐成功'
commit tran

 

分享到:
评论

相关推荐

    SQLServer 视图 事务 索引

    SQL Server中的视图、事务和索引是数据库管理中的核心概念,它们各自扮演着重要的角色,帮助用户更高效、安全地操作和查询数据。 视图,作为数据库的一种抽象,是基于一个或多个表的SELECT查询结果集的逻辑表示。在...

    关于事务、视图、索引的小程序 C# SQL数据库

    在数据库管理中,事务、视图和索引是三个至关重要的概念,对于任何数据库系统,无论是SQL Server、MySQL还是Oracle,它们都是数据操作和优化的基础。让我们深入探讨这些概念及其在C#编程环境中的应用。 **事务...

    SQL语句大全(程序设计、视图、索引、游标、事务、触发器、锁、存储过程、XML、权限管理……)

    本资源“SQL语句大全”涵盖了多个关键概念,包括程序设计、视图、索引、游标、事务、触发器、锁、存储过程、XML以及权限管理。以下是对这些主题的详细阐述: 1. **程序设计**:T-SQL(Transact-SQL)是SQL Server中...

    Sql Server 数据库视图 索引等

    根据给定的文件信息,我们可以总结出以下几个关键的知识点: ...这些知识点涵盖了SQL Server数据库中的视图、索引、存储过程、事务、触发器以及内置函数等内容,对于理解和应用SQL Server数据库非常有帮助。

    SQL课件--十、事务、索引、视图

    SQL课件--十、事务、索引、视图

    数据库索引,存储过程,视图,事务

    根据给定文件中的标题、描述、标签以及部分内容,我们可以总结出以下关于数据库索引、存储过程、视图、以及事务的重要知识点。 ### 数据库索引 数据库索引是一种数据结构,用于提高数据库查询操作的速度。索引使得...

    浅析SQL Server 2000索引视图:使用索引视图提高查询性能.pdf

    例如,在联机事务处理(OLTP)数据库中,需要处理大量数据并执行复杂聚合的查询会因索引视图而得到性能的提升。 在决策支持系统(DSS)中,由于数据更新不频繁,索引视图可以用来存储汇总数据并加快查询执行速度。...

    SQL-server 事务、索引、视图

    根据给定文件中的标题“SQL-server 事务、索引、视图”以及描述和个人总结的SQL Server数据库相关知识,本文将详细介绍SQL Server中事务、索引和视图的相关概念及应用。 ### 一、SQL Server中的事务 事务是SQL ...

    SQL Server 数据库基础、数据管理、数据查询、事务索引视图、存储过程及触发器、高级编程

    SQL Server 数据库基础.pdf,SQL Server 数据管理(常用函数).pdf,SQL Server 数据查询(表的关联).pdf,SQL Server 事务索引视图.pdf,SQL Server 存储过程及触发器.pdf,SQL Server 编程及高级查询.pdf,让你从入门...

    视图、索引、存储过程、触发器使用

    在IT行业的数据库管理领域,视图、索引、存储过程和触发器是四个核心概念,它们各自发挥着关键作用,帮助提升数据库的性能、安全性和维护性。下面,我们将深入探讨这四个概念,并结合给定文件的部分内容进行具体分析...

    Oracle中的用户操作、赋权、事务、锁、索引SQL语句.doc

    ### Oracle中的用户操作、赋权、事务、锁、索引SQL语句 #### 一、用户操作 在Oracle数据库管理中,用户管理是一项基础而重要的任务。用户操作主要包括用户的创建、删除、锁定与解锁以及密码的修改等。 ##### 创建...

    SQL2005索引、视图、存储过程、触发器

    在SQL Server 2005中,索引、视图、存储过程和触发器是数据库管理系统中的关键元素,它们在数据库设计和优化中扮演着重要角色。以下是对这些概念的详细解释: **索引**: 索引是数据库系统中为了加快数据检索速度而...

    浅谈SQL Server 2012列存储索引技术.pdf

    - **视图限制**:不能基于视图或索引视图创建。 - **不支持稀疏列**:无法包含稀疏列。 - **非键约束**:不能用作主键或外键。 - **不可更改**:不能用ALTER INDEX语句修改,需删除重建。 - **无INCLUDE关键字**:...

    SQL资源(存储过程试图索引等)

    本资源包包含了与SQL相关的多个核心概念,如存储过程、视图和索引,这些都是数据库管理中的重要组成部分。 1. **存储过程**:存储过程是预编译的SQL语句集合,它封装了特定的功能,可以在需要时重复调用。存储过程...

    Sql语言学习全套-给力推荐

    事务处理及回滚.sql 使用全文索引.txt 函数.sql 分布式查询视图.sql 创建和使用游标示例.sql 各种联接类型示范.sql 命名事务.sql 回滚存储点.sql 子查询.sql 存储过程.sql 完全下线.sql 寻找雇员上级....

    Mysql数据库高级用法之视图、事务、索引、自连接、用户管理实例分析

    本文实例讲述了Mysql数据库高级用法之视图、事务、索引、自连接、用户管理。分享给大家供大家参考,具体如下: 视图 视图是对若干张基本表的引用,一张虚表,只查询语句执行结果的字段类型和约束,不存储具体的数据...

    mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

    综上所述,MySQL中的索引、视图、触发器、游标、事务和存储过程都是高级特性,这些工具可以帮助开发人员更好地管理和操作数据库。通过对这些概念的理解和实践,可以大幅提升数据库应用的性能和可靠性。

    SQL Server 2000视图问题

    除了视图,SQL Server 2000的事务管理也是重要的概念。事务包括`BEGIN TRANSACTION`、`COMMIT`、`ROLLBACK`和`SAVE TRANSACTION`,它们用于确保数据一致性。开始事务后,你可以执行一系列操作,然后决定是否提交...

    SQLServer语句小结(SQL语句使用整理)

    - CREATE:用于创建数据库、表、索引、视图等数据库对象。如`CREATE DATABASE database-name`用来创建新的数据库。 - ALTER:用于修改已存在的数据库对象。如`ALTER TABLE tabname ADD COLUMN col type`用来向表中...

    SQLServer实用SQL语句大全

    第10章:视图和索引视图 视图作为虚拟表,提供了一种简化查询和保护数据的方法。索引视图则可以提高特定查询的性能。 第11章:游标和事务 游标允许逐行处理数据,而事务则保证了数据库操作的一致性和完整性。 第12...

Global site tag (gtag.js) - Google Analytics