1. 关系五种基本运算
    1. ① 并:
      1. R,S具有相同的关系模式(元素相同,结构相同),记为R U S,返回由R或者S元组构成的集合组成
    2. ② 差:
      1. R,S具有相同的关系模式(元素相同,结构相同),记为R-S,右属于R但不属于S的元组组成
    3. ③ 自然连接(广义笛卡尔积):
      1. R×S由n目和m目的关系R,S组成一个(n+m)列的元组集合,若R有K1个元组,S有K2个元组,则R×S有K1*K2个元 组
    4. ④ 投影(π) :
      1. 从关系的垂直方向开始运算,选择关系中的若干列组成新的列。
    5. ⑤ 选择(σ):
      1. 选择从关系的水平方向进行元算,选择满足给定条件的元组组成新的关系。
  2. ACID
    1. 原子性Atomicity
      1. 定义:事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
      2. 解决方法:采用日志机制。例如,SQL Server使用一个预写事务日志,在将数据提交到实际数据页面前,先写在事务日志上。
    2. 一致性Consistency
      1. 定义:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
      2. 解决方法
        1. 数据库机制层面:在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,Check约束等)和触发器设置。
        2. 业务层面:保持业务的一致性,也可以通过转移到数据库机制层面进行保证
    3. 隔离性Isolation
      1. 定义: 多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
      2. 即:在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。一般情况下,完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。
      3. 事务之间的相互影响
        1. 分类
          1. 脏读
          2. 一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的
          3. 不可重复读
          4. 在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
          5. 幻读
          6. 当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.
          7. 丢失更新
          8. 两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
      4. 数据库的事务隔离级别 (TRANSACTION ISOLATION LEVEL)
        1. 前提:是一个多用户、多进程、多线程的并发系统
        2. 使用方法:SET TRANSACTIONISOLATION LEVEL REPEATABLE READ
        3. 未提交读: 在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。
        4. 已提交读:只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。已提交读是SQL Server的默认隔离级别。
        5. 可重复读: 像已提交读级别那样读数据,但会保持共享锁直到事务结束。
        6. 可串行读:工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围。这就阻止了新数据插入查询所涉及的范围。
        7. 解决方法:加锁和阻塞
          1. 缺点:安全级别越高,处理效率越低
    4. 持久性Durability
      1. 定义:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
      2. SQL SERVER通过write-ahead transaction log来保证持久性。即事务中对数据库的改变在写入到数据库之前,首先写入到事务日志中。而事务日志是按照顺序排号的(LSN)。当数据库崩溃或者服务器断点时,重启动SQL SERVER,SQLSERVER首先会检查日志顺序号,将本应对数据库做更改而未做的部分持久化到数据库,从而保证了持久性。
    5. 总结
      1. 事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。
      2.   数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。