zoukankan      html  css  js  c++  java
  • 事务,视图以及游标

    一:事务:

    是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务是恢复和并发控制的基本单位。

    事务的四个特性:ACID

    A:atomicity 原子性,事务里的所有操作都是一体的,要么一起完成,要么就都不执行,不可能出现执行一半的情况。

    C:consistency 一致性,保证数据的一致

    I:isolation 隔离性,事务的执行不被干扰,也就是说事务在执行的过程中不可以对其中的数据进行其它操作,等事务完成之后才可以操作。

    D:durability 持久性,执行的时候会有记录,如果突然断电,重新通电时返回重新开始执行事务

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

    @@error --错误提醒,程序无错的时候返回0,出错返回出错的值

    一种事务的用法是用if语句判断@@error的值是否不等于0,来进行回滚操作:

    if @@ERROR <>0 --判断是否出错
    begin
    rollback  --出错回滚
    end
    else
    begin
    commit  --没错提交
    end

    另一种用法是用try和catch,try是开始执行程序体,没问题的话commit提交,程序出错则直接被catch抓住,回滚。

    begin try
     --程序体
     commit
    end try
    begin catch  --抓错
     rollback
    end catch

    二:索引,索引是为了提高查找的效率

    建索引的步骤:

    在表的设计界面,右键选择索引/键

    在出来的界面上点添加,然后选出哪一列作为索引就建立起了一个索引

    三:视图

    视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。

    所以视图不是真实存在的基础表,而是一张虚表视图,所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。通过视图看到的数据只是存放在基本表中的数据。

    视图的优点:

    1.视点集中
    视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务
    2.简化操作
    若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。
    3.合并分割数据
    表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。
    4.安全性
    通过视图用户只能查看和修改他们所能看到的数据,其它数据库或表既不可见也不可以访问。

    --创建一个视图,在chinastates表中查询出省份是shandong的城市

    create view shandong
    as
    select *from ChinaStates where parentareacode='37'
    go
    --显示视图

    之后每次要查询shandong的城市时直接调用视图就可以,不用每次都写代码,比较简便。
    select *from shandong

    --删除视图
    drop view

    四:游标

          关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式。

          游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制,用游标的时候一般是伴随着while来用的,游标用的比较少,因为会降低数据库的效率。

    这里定义了一个游标,利用while和next来查询奥迪A4 07款 上一个和下一个

    declare cur_car cursor scroll  --定义游标,scroll是让游标可以来回滚动
    for select name from car where name like '奥迪%'
    open cur_car --开启游标
    fetch first from cur_car  --让游标回到第一个
    while @@FETCH_STATUS =0  --@@fetch_status是全局变量返回上次执行FETCH 命令的状态,0   FETCH 命令被成功执行
    -1   FETCH 命令失败或者行数据超   过游标数据结果集的范围
    -2   所读取的数据已经不存在
    begin
     declare @name varchar(20)
     fetch next from cur_car into @name
     
     if LEFT(@name,LEN('奥迪A4 07款'))='奥迪A4 07款'
     begin
      fetch prior from cur_car into @name
      print @name
      fetch relative 2 from cur_car into @name
      print @name
     end
    end
    close cur_car

    五:锁

    锁分为悲观锁和乐观锁

    悲观锁:它指的是对数据被外界(包括本系统当前的其他事务,以及来自 外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态,事务就是悲观锁,在事务执行的时候,数据不可查不可更改。

    乐观锁:相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制,在更改数据的时候可以进行查询操作,在更改完成的瞬间往数据库里放的时候才进行加锁,锁的时间较短,这种机制的锁谨慎使用。

  • 相关阅读:
    leetcode第26题--Remove Duplicates from Sorted Array
    leetcode第25题--Remove Element
    leetcode第24题--Reverse Nodes in k-Group
    leetcode第23题--Swap Nodes in Pairs
    leetcode第22题--Merge k Sorted Lists
    leetcode第21题--Generate Parentheses
    leetcode第20题--Valid Parentheses
    leetcode第19题--Remove Nth Node From End of List
    leetcode第18题--Letter Combinations of a Phone Number
    leetcode第17题--4Sum
  • 原文地址:https://www.cnblogs.com/Alvin-ftd/p/3969285.html
Copyright © 2011-2022 走看看