传智播客数据库开发和ADO.NET知识点总结

1.使用设计器创建约束时,增加外键约束时,设置级联更新、级联删除。
--设置主外键关系的级联删除
alter table Employees add constraint FK_Employees_Department_DepId
foreign key(DepId) references Department(DepId)
on delete CASCADE --设置级联删除
--on update cascade --设置级联更新
2.建议:优先使用between … and …,而不是“列>=值1 and 列<=值2 ”,between … and …已做过优化处理,效率高。
3.ConnectionStringBuilder//自动生成连接字符串
4.ADO.NET 默认启动连接池,高性能
5.using(StreamReader sr = new StreamReader("aa.txt"))
{
 while(!sr.EndOfStream)//获取一个值,该值表示当前流位置是否在流的末尾
 {
  
 }
}
6.当进行多条件搜索时,可以使用以下方法进行拼接sql语句
List<string> wheres = new List<string>();
List<SqlParameter> parameters = new List<SqlParameter>();
if(true)
{
 wheres.Add(" a=@a");
 parameters.Add(new SqlParameters("@a",1));
}
if(wheres.Count>0)
{
 string sql = "select * from table where "+string.Join(" and ",wheres.ToArray())
}
7.当使用表连接查询时,查询没有。。。,不等于。。。等,使用左连接,左连接和右连接都是先将匹配的数据
找到,然后再将那些没有匹配的数据添加进来,(不是一起查询出来的,有先后顺序)
8.局部临时表
create table #tbName(列信息);
表名前缀#
只在当前会话中有效,不能跨连接访问
作用域范围类似C#:
如果直接在连接会话中创建的,则当前连接断开后删除,如果是在存储过程中创建的则当前存储过程执行完毕后删除
全局临时表
create table ##tbName(列信息);
表名前缀##
多个会话可共享全局临时表
当创建全局临时表的会话断开,并且没有用户正在访问(事务正在进行中)全局临时表时删除
(*)表变量:declare @varT1 table(col1 int,col2 char(2));//存储更小量的数据,比临时表有更多的限制。
临时数据都存储在tempdb,当服务重新启动的时候,会重建tempdb.
临时表的应用:在对大数据量的表做复杂子查询的时候为了提高执行效率,降低内存消耗可以使用临时表。
9.使用视图注意事项:
1.视图中的查询不能使用order by ,除非指定了top语句。
视图被认为是一个虚拟表,表是一个集合,是不能有顺序的。而order by 则返回的是一个有顺序的,是一个游标。
在视图中使用select top100 percent + order by 也不行。
所有查询的列,必须有列名,且列名必须唯一
create view vw_name as 后不能跟begin en
10.调用存储过程时显示指定参数的值
EXEC usp_upGrade2 @english=55,@math=60
优点:
执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
允许模块化程序设计 – 类似方法的复用
提高系统安全性 – 防止SQL注入
减少网络流通量 – 只要传输 存储过程的名称
11.触发器插入

CREATE TRIGGER tr_updateStudent ON score
for INSERT
AS
Begin
 declare @sid int,@scoreid int
 select @sid = studentId,@ scoreid=sid from inserted
 if exists(select * from student where sid=@sid)
  print ‘插入成功’
 else
  delete from score where sid = @scoreId
End
Insert into score (studentId,english) values(100,100)
触发器删除
CREATE TRIGGER tr_deleteStudent ON student
for delete
AS
begin
insert into backupStudent select * from deleted
End

Delete from student where sId=1
尽量不使用触发器


CREATE TRIGGER triggerName ON 表名
after(for)(for与after都表示after触发器) | instead of
UPDATE|INSERT|DELETE(insert,update,delete)
AS
begin

end

instead of 使用时会将触发器中的操作代替你要做的增删改

 

 

12.新建数据库如果要兼容某个低版本的话,可以做一下操作(图)


13.脱机:告诉数据库引擎,暂停操作当前数据库,就可以随意拷贝、剪切
14.CASE使用
select name,等级=(
case level
when 1 then '骨灰'
when 2 then '大虾'
when 3 then '菜鸟'
end
)
from [user]

15.事务

事务的四大特性:ACID
原子性(Atomicity):当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要么同时成功,要么同时失败
一致性(Consistency):就是在一个用户未提交他的事务前(比如更新一个字段),其他用户查询出来的结果都一样
隔离性(Isolation):并发事务之间互相影响的程度,比如一个事务会不会读取到另一个未提交的事务修改的数据。
          事务的隔离级别从低到高有:
          Read Uncommitted:最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。
          Read Committed:只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
          Repeated Read:在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读。
          Serialization:事务串行化执行,隔离级别最高,牺牲了系统的并发性。可以解决并发事务的所有问题。
          通常,在工程实践中,为了性能的考虑会对隔离性进行折中。
持久性(Durable):事务提交后,数据必须以一种持久性方式存储起来

 

posted @ 2013-04-25 08:28  学亮  阅读(315)  评论(0编辑  收藏  举报