T-Sql编程

        1.批处理

批处理语句我们并不陌生,前面使用过的GO就是批处理的标志。它是一条或多条SQL语句的集合。SQLServer将批处理语句编译成一个可执行的单元,此单元称为执行计划。每个批处理可以编译成单个执行计划,从而提高执行效率。批处理的好处:简化数据库的管理

        2.变量

变量:存储数据值的。在T-SQL中执行一批sql语句,可以声明许多变量以便临时使用。声明变量以后,可以在批处理中用一条数据设置该变量的值。由于上下语句中传递数据。

        局部变量:在局部声明的变量

语法:

DECLRE@变量名 数据类型

赋值:

SET :一般用于赋值给变量指定的常量

SELECT :用于从表中查出来,在赋值给变量

注意:数据不能多于一条。

        全局变量:由系统定义和维护,我们可以直接使用,一般不自定义全局变量

表量含义
@@ERROR最后一个T-SQL错误的错误号
@@IDENTITY最后一次插入的标识值
@@Language当前使用语言的名称
@@MAX_CONNECTIONS可以创建的同时连接的最大数目
@@ROWCOUNT受上一个SQL语句影响的行数
@@SERVERNAME本地服务器的名称
@@SERVICENAME该计算机上的SQL服务的名称
@@TRANCOUNT当前连接打开的事务数
@@VERSIONSQLSERVER的版本信息

        局部变量

1)Print 局部变量或者字符串
2)Select 局部变量 as 自定义列名
        联合查询UNION
1) 联合不合并数据 Union All
2) 联合合并数据 Union
要求:查询列的数据类型要一致、数目要一致
        高级查询
1. 简单子查询
2. in 子查询
3. exists 子查询
4. 相关子查询
        简单子查询
1 )子查询需要用 ()括起来,一般在运算符的右边
2 )子查询返回的结果必须和条件匹配
3 )当子查询跟随在 = != < <= > >= 之后,要求子查询只返回 1 个结果
4 in 子查询的返回结果可以有多个,一般使用 in 代替 =
连表查询可以被子查询代替, 子查询不一定可以被连表查询代替

         相关子查询

不相关子查询: 子查询可以单独执行
相关子查询子: 查询不可以单独执行

        事务

保障一件事情必须成功,不成功则回滚所有操作。(不成功则成仁)不相关子查询

        事务分类

①、显示事务

1.--开始事务 begin transaction

2.--提交事务 commit transaction

3.--回滚事务 rollback transaction

②、隐式事务

SET IMPLICIT_TRANSACTIONS ON

SQLSERVER的默认模式,如果成功执行,则自动提交,如果失败,则全部回滚。

         聚集索引(聚类索引,簇集索引,数据页和索引的顺序一致)

  • create clustered index IX_TEST_TNAME --创建一个非聚集索引
  • ON 表名(列名) --为TEST表的TNAME字段创建索引
  • WITH FILLFACTOR = 30 --填充因子为30%   
  • 使用聚集索引的场合为:
  • a.此列包含有限数目的不同值;
  • b.查询的结果返回一个区间的值;
  • c.查询的结果返回某值相同的大量结果集。
  • d.以最快的速度缩小查询范围。
  • e.以最快的速度进行字段排序。

        非聚集索引(非聚类索引,非簇集索引,数据页顺序和索引顺序不一致)

  • create nonclustered index IX_TEST_TNAME --创建一个非聚集索引
  • ON 表名(列名) --为TEST表的TNAME字段创建索引
  • WITH FILLFACTOR = 30 --填充因子为30%
  • 填充因子】低更改的表(读写比率为100:1):100%的填充因子;高更改的表(写超过读):50-70%的填充因子;读写各一半的:80-90%的填充因子
  • 使用非聚集索引的场合为:
  • 1.此列包含了大量数目不同的值;
  • 2.查询的结束返回的是少量的结果集;
  • 3.order by 子句中使用了该列。
  • 索引在什么时候用?(对的时间,对的地点,用对的索引)
  • 对的时间:数据量100w海量的时候
  • 对的索引:号码用非聚集,订单有日期用聚集。
  • 对的地方:性别列不能。

动作描述

使用聚集索引 

使用非聚集索引

 外键列

主键列

列经常被分组排序(order by)

返回某范围内的数据

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

频繁修改索引列

不应

一个或极少不同值

不应

不应


        事务实例

use master;

--创建银行账户表
create table BankAcoount(
	name varchar(20)
	,money int
)

go
--追加余额不能为负数的约束
alter table BankAcoount
add constraint CK_money check(money>=0)  

go
--多行插入2条测试数据
insert into BankAcoount
	select '枫哥',0
	union
	select '王健林',2000	

select * from BankAcoount;

--转账:王健林给枫哥转3000
--1、王健林帐号余额减少3000
update BankAcoount set money-=3000 where name = '王健林'
--2、枫哥帐号余额增加3000
update BankAcoount set money+=3000 where name = '枫哥'

--使用事务来解决
begin transaction;   --开启事务
declare @s int = 0;
--使用系统变量错误码@@error
update BankAcoount set money-=1000 where name = '王健林'
set @s = @s+@@error;
update BankAcoount set money+=1000 where name = '枫哥'
set @s = @s+@@error;
if(@s=0)
	commit tran;  --提交事务
else
	rollback tran;--回滚事务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值