第4章SQL中的数据处理语言

上传人:飞*** 文档编号:6401672 上传时间:2017-08-08 格式:PPT 页数:180 大小:972KB
返回 下载 相关 举报
第4章SQL中的数据处理语言_第1页
第1页 / 共180页
第4章SQL中的数据处理语言_第2页
第2页 / 共180页
第4章SQL中的数据处理语言_第3页
第3页 / 共180页
第4章SQL中的数据处理语言_第4页
第4页 / 共180页
第4章SQL中的数据处理语言_第5页
第5页 / 共180页
点击查看更多>>
资源描述

《第4章SQL中的数据处理语言》由会员分享,可在线阅读,更多相关《第4章SQL中的数据处理语言(180页珍藏版)》请在金锄头文库上搜索。

1、实用数据库技术,第4章 SQL中的数据处理语言,学习内容,创建、更改及删除数据 事务 检索数据Where子句聚集查询结果子查询表连接,概述,本章我们将学习了SQL中的数据处理语句,语句,也叫数据处理语言(DML)。包括:创建数据的INSERT语句、更改数据的UPDATE语句、删除数据的DELETE语句及检索数据的SELECT。,INSERT语句,语法 INSERT INTO table_dame (column_list) VALUES (value_list)table_name是表名称,记录将要添加到该表中。,INSERT语句 示例1,Studios表的INSERT语句,INSERT IN

2、TO StudiosVALUES(1,Giant,LosAngeles,CA),INSERT语句 示例2,Studios表中的列分别是:studio_id、name、city和state。因为这些值都按照上述顺序包括在VALUES子句中,所以INSERT语句可以正常工作。,INSERT INTO Studios (city, state, name, studio_id) VALUES(Burbank, CA, MPM,2),INSERT语句 小结,在多数数据库中,表中的列都按照它们创建的顺序出现。当使用CREATE TABLE创建新的表时,列的顺序将保持为它们在原始语句中指定的顺序。,UPD

3、ATE语句,UPDATE语句用来对表中现有的行作改动。UPDATE语句的结构如下: UPDATE table SET column = value,. WHERE condition,UPDATE语句,UPDATE语句用来对表中现有的行作改动。UPDATE语句的结构如下: UPDATE table SET column = value,. WHERE condition,UPDATE语句,UPDATE语句有3个部分。第一,必须指定要更新哪一个表。该语句的第二部分是SET子句,应当指定其中要更新的列和要插入的值。最后,WHERE子句可以用来指定表中哪些行将要更新。,UPDATE语句 示例1,更改

4、某工作室的城市和州的UPDATE语句,UPDATE Studios SET city = New York,state = NY WHERE studio_id = 1 1 row updated.,UPDATE语句 示例1,可以看到,在SET子句中,将city和state字段都进行了更改。WHERE子句表明只有studioID为1的行才能被更新。在编写只对表中某一行产生影响的UPDATE语句时,在WHERE子句中使用主关键字来确保只有一行受到改变的影响往往是一个好办法。如果忽略UPDATE语句中的WHERE子句,那么在更新表中的所有行都将受到该语句的影响。,UPDATE语句 示例2,用UPD

5、ATE来更改表中所有行的语句,UPDATE StudiosSET state = AK2 rows updated.,SELECT * FROM StudiosSTUDIO_ID NAME CITY STATE1 Giant New York AK2 MPM Burbank AK,DELETE语句,DELETE语句也可以用来将记录从表中删除。DEILETE语句的结构非常简单:DELETE FROM tableWHERE condition,DELETE语句,可选的WHERE子句可用来限制DELETE语句删除的行数。如果忽略WHERE子句,表中所有的行都会被删除。通过使用WHERE子句,可以指定

6、要想删除每行所必须满足的条件。,DELETE语句 示例,删除Studios 表中所有的行,DELETE FROM StudiosWHERE state = AK2 rows deleted.,事务(transaction)的概念,提起事务,就会用到银行中两个帐户之间转帐的例子,即从帐户A转XX元钱到帐户B,它同时涉及到两个不同帐户的读写操作。,事务的概念 续,事务中涉及数据库访问的基本操作:read(X):从数据库传送数据项X到执行read操作的事务的一个局部缓冲区中;write(X):从执行write的事务的局部缓冲区中把数据项X传回数据库。,事务的概念 续,事务之间的相互影响:数据库系统中

7、同时可能有很多事务要执行,这些事务要么互不相干,要么要访问相同的数据项。对于那些要访问相同数据项的事务之间的相互影响要特别处理 。,事务的概念 续,事务的概念 续,事务TI是从A帐户转50元钱到B帐户,事务Tj是计算帐户A和B的和。两个事务同时在系统中执行,那么事务Tj的read(A)操作可能在事务TI的write(A)之前或之后执行;同理,事务Tj的read(B)操作也可能在事务Ti的write(B)之前或之后执行。如果事务Tj的read(A)操作在事务Ti的write(A)之前执行,而事务Tj的read(B)操作却在事务Ti的write(B)之后执行,那么事务Tj的计算结果就是3050,而

8、不是想象中的3000,凭空就多了50元钱。,事务的概念 续,从根本上讲,“事务”是SQL语句组,出于处理的目的,我们将其看作为单一的单位。如果有必要执行一个特定的任务,事务可以组成单个语句,否则可以包含多个语句。事务的重要特征是:除非执行事务内的所有语句,否则,对应用到数据库的事务不作任何更改。,事务的特性(简称ACID),数据库系统必须维护事务的以下特性(简称ACID):原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability),原子性(Atomicity),事务中的所有操作要么全部执行,要么都不执行; 如果事务没有原子性的保

9、证,那么在发生系统故障的情况下,数据库就有可能处于不一致状态。,原子性(Atomicity),如果故障发生在write(A)和read(B)之间,则将有可能造成帐户A的余额已经减去50元钱,而帐户B的余额却没有改变,凭空就少了50元钱。,原子性(Atomicity),值得注意的是,即使没有故障发生,系统在某一时刻也会处于不一致状态。原子性的要求就是这种不一致状态除了在事务执行当中出现外,在其他任何时刻都是不可见的。保证原子性是DBMS的责任:即事务管理器和恢复管理器的责任。,一致性(Consistency),主要强调的是,如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的;

10、 所谓一致性简单地说就是数据库中数据的完整性,包括它们的正确性。,一致性(Consistency),对于图中的事务Ti来说,一致性要求就是事务的执行不改变帐户A和帐户B的和。否则的话事务就会创造或销毁钱!,隔离性(Isolation),即使多个事务并发(同时)执行,每个事务都感觉不到系统中有其他的事务在执行,因而也就能保证数据库的一致性;,隔离性(Isolation) 续,事情的起因:即使每个事务都能保持一致性和原子性,但如果几个事务并发执行,且访问相同的数据项,则它们的操作会以人们所不希望的某种方式交叉执行,结果导致不一致的状态!,隔离性(Isolation) 续,访问相同数据项的两个事务并

11、发执行,隔离性(Isolation) 续,解决办法:如果几个事务要访问相同的数据项,为了保证数据库的一致性,可以让这几个事务: 串行执行:即一个接着一个地执行事务; 并发执行:即同时执行多个事务,但用并发控制机制来解决不同事务间的相互影响。,隔离性(Isolation) 续,隔离性的保证:事务的隔离性能够确保事务并发执行后的系统状态与这些事务按某种次序串行执行后的状态是等价的。保证隔离性也是DBMS的责任:即并发控制管理器的责任。,持久性(Durability),事务成功执行后它对数据库的修改是永久的,即使系统出现故障也不受影响。持久性的含义是说:一旦事务成功执行之后,它对数据库的更新是永久的

12、。可以用以下两种方式中的任何一种来达到持久性的目的: 以牺牲应用系统的性能为代价 以多占用磁盘空间为代价,持久性(Durability) 续,以牺牲应用系统的性能为代价:要求事务对数据库系统所做的更新在事务结束前已经写入磁盘;以多占用磁盘空间为代价:要求事务已经执行的和已写到磁盘的、对数据库进行更新的信息是充分的(例如,数据库日志的信息就足够的多),使得DBMS在系统出现故障后重新启动系统时,能够(根据日志)重新构造更新。保证持久性也是DBMS的责任:即恢复管理器的责任。,事务的状态,事物的状态有如下几种:中止事务:执行中发生故障、不能执行完成的事务; 事务回滚:将中止事务对数据库的更新撤消掉

13、;已提交事务:成功执行完成的事务。,事务的状态 续,系统的恢复步骤是:1、 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。2、 对该事务的更新操作执行逆操作。即将日志记录“更新前的值”写入数据库。这样,如果记录中是插入操作,则相当于做删除操作;若记录中是删除操作,则做插入操作;若是修改操作,则相当于用修改前的值代替修改后的值。3、 继续反向扫描日志文件,查找该事务的其他更新操作,并做和2一样的同样处理。4、 如此处理下去,直至读到此事务的开始标记,事务的故障恢复就完成了。,事务的隔离级别,隔离级别定义了事务与事务之间的隔离程度。隔离级别与并发性是互为矛盾的:隔离程度越高,

14、数据库的并发性越差;隔离程度越低,数据库的并发性越好。,ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别,未提交读(read uncommitted)提交读(read committed)重复读(repeatable read)串行读(serializable),隔离级别的效果1-5,更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。不可重复读取(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同

15、的结果集,此时发生不可重复读取。幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。,更新丢失(lost update)示例:,事务A和事务B同时修改某行的值,1.事务A将数值改为1并提交2.事务B将数值改为2并提交。这时数据的值为2,事务A所做的更新将会丢失。解决办法:对行加锁,只允许并发一个更新事务。,脏读(dirty read)示例:,1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务) 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000像这样,Mary记取的工资数8000是一个脏数据。解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。,不可重复读取(nonrepeatable read)示例:,1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号