6-19笔记

来源:互联网 发布:asp个人业务网站源码 编辑:程序博客网 时间:2024/06/07 01:19
1、数据量太大的时候,可以用临时表进行优化。
对于过千万的数据,一般都用分表来存储,不会存在一张表中的,。
临时表:局部临时表,以#开头,如果在连接会话中创建的,则当前连接断开后删除;如果是在存储过程中创建的则当前存储过程执行完毕后删除;只在当前 会话中有效。
全局临时表,以##开头,当创建全局临时表的会话断开,并且没有用户正在访问全局临时表时候删除;每个连接的用户都可以访问。表变量。
临时表的应用:在对大量数据的表做复杂子查询的时候为了提高执行效率,降低内存消耗可以使用临时表。
2、视图:是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。
视图本身并不存储数据,而是存储的是查询语句,真实表中数据更新后,则通过视图查询的结果也变了。
在视图中的查询语句,必须为每一列创建一个列名!
在视图、子查询中都要避免使用order by语句。  
视图可以防止未经许可的用户访问敏感数据。视图的目的是为了方便查询,所以一般情况下不能对视图进行增删改。
在视图中不能使用order by语句,除非 指定了top或者for xml。视图被认为是一个虚拟表,表是一个集合,是不能有顺序的。而order by返回的是一个有顺序的是一个游标。
索引里面建视图,索引视图是会存储数据的。
create view vw_name as 后不能跟begin end。
drop view 视图名 ,alter可以反复修改。
3、声明局部变量:
declare @name varchar(10)
declare @age int
为变量赋值:
set @name='lee'或者select @age=19
使用set赋值和select赋值的区别:
当使用set为变量赋值时,如果右边返回多个值,则“报错”。
当使用select为变量赋值时,如果右边返回多个值,则始终返回最后一条,以最后一条为准。
一开始变量没有赋值的时候为null,null与任何类型计算的结果还是null所以建议声明变量的时候一定要赋初值。
4、全局变量(只能用,必能修改什么的):通过判断@@error变量中是否为0,就可以判断上一句sql语句执行是否出错了。如果@@error为0,则上一条语句没有出错,如果@@error不为0,则上一条SQL语句出现错误。
isnull(tenglish,0),判断tenglish是否为null,如果为null,则返回0,不为null则返回tenglish的原值。
5、事物:访问并可能更新数据库中各种数据项的一个程序执行但愿,也就是多个sql语句组成,必须作为一个整体执行。这些sql语句作为一个整体一起向系统提交,要么都执行,要么都不执行。
打开事物:begin transcation或者
begin tran
提交事物:commit tran
回滚事物:rollback tran

begin TRAN
DELETE FROM Customers WHERE city='Miami'
ROLLBACK
这样去执行的时候,即使不小心删除错误数据了,rollback一下也是可以恢复原来的数据的,这是个好习惯,要记得用在工作中;

全局变量@@error,@@error只能判断前一条sql语句执行是否有错,为了判断事物中所有T_Sql语句是否有错,我们需要对错误就行累计:例如:set @@errorSum=@errorSum+@@error

事物:原子性(Actomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的):要么执行,要么不执行
一致性(Consistency):当数据完成时,数据必须处于一致状态
隔离性(Isolation):对数据进行修改的所有并发事务时彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

6、存储过程:就像数据库中运行的方法(函数);系统存储过程一般以sp_或者xp_开头。
存储过程,执行速度快,可以把某些功能封装起来,封装成一个模块;防止注入攻击;减少网络流量。
7、存储过程如果有参数,则调用的时候必须为参数赋值。
当传递参数的时候可以显示的指定参数的名。
存储过程返回值,使用output参数。存储过程中返回值也可以通过参数来做,类似于C#中的out参数。存储过程的output参数要得到返回值,也得传一个变量进去。在调用的时候也得加output。
8、建议存储过程中要写begin end。
9、执行存储过程和sql语句最大的区别需要设置一个commandtype。
获取输出参数,必须等到sql语句执行完毕。
10、通过command对象执行的时候,无论是sql还是存储过程,到底调用哪个方法来执行,只看,最后执行完毕后的返回结果,如果结果是结果集就用reader,如果是单个值,则优先看了executescalar,如果是增删改则executenonquery。 
11、触发器,sql server中的触发器是表级触发器,无论删除多少行或者插入多少航,只触发一次。当使用instead of 触发器以后,原来的删除操作被替换了。
0 0
原创粉丝点击