zoukankan      html  css  js  c++  java
  • 传智播客数据库开发和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):事务提交后,数据必须以一种持久性方式存储起来

     

  • 相关阅读:
    Spring 事务管理tx,aop
    好的博客参考之Spring
    Spring 事务管理
    Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建
    ssm框架搭建
    SSH整合不错的博客
    org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.my.service.ProductService] for bean with name 'productService' defi报错解决方法
    修改firefox的默认缩放比
    深入理解计算机系统笔记
    OnePlus5刷机后一直检查更新
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3041563.html
Copyright © 2011-2022 走看看