Oracle中SQL更新数据.ppt_第1页
Oracle中SQL更新数据.ppt_第2页
Oracle中SQL更新数据.ppt_第3页
Oracle中SQL更新数据.ppt_第4页
Oracle中SQL更新数据.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL更新数据,Oracle中可以利用DML更新数据。其DML语句与其他数据库的SQL语法完全一致都是遵守了工业标准。与查询操作不同,更新数据将导致数据库状态的变化,因此,Oracle同样提供了提交与回滚操作来保证数据库状态的一致性。Oracle常见的更新操作包括:插入数据;修改数据;删除数据。,17.1插入数据,插入数据即向数据表中插入新的记录,插入数据应该使用insert命令。插入数据的主要途径包括:通过指定各列的值直接插入、通过子查询插入、通过视图插入等。对于通过视图插入的方式,大多数应该使用insteadof触发器来进行处理,因此,本章将着重讲述前两种插入方式。,17.1.1insert语句向表中插入数据,insertintopeoplevalues(people_seq.nextval,张文,ACT);insertintopeople(id,name)values(people_seq.nextval,柳平);注意与说明:当使用第二种方式插入数据时,列名列表和列值列表必须保持一致,即每个列的数据类型和实际插入类型保持一致。,17.1.2利用子查询批量插入数据,Oracle可以利用子查询向表中批量插入数据。此时的SQL语句除了包含insertinto命令之外,还应该包含一个查询语句。insertintopeopleselectemployee_id,employee_name,statusfromt_employeeswhereemployee_id=3;,17.1.3insert语句与默认值,当向数据表中插入数据时,如果表中某列含有默认值约束,对于该列又没有显式赋值,那么默认值将作为列值进行插入。altertablepeoplemodify(statusvarchar2(3)defaultACT);insertintopeople(id,name)values(12,殷商);select*frompeoplewhereid=12;,17.1.4insert语句与唯一性约束,当使用insert语句时,需要注意的是唯一性约束。当插入的列值违反了唯一性约束时,Oracle将抛出错误。例如,表people中,列id为表的主键,尝试向其中插入数据:insertintopeoplevalues(11,张三,ACT)对于数值型主键来说,在插入数据时,使用序列来获得主键值是一个好的选择。,17.1.5insert语句与外键约束,insert语句更新数据表时,同样会引起外键约束的检查。altertablet_salaryaddconstraintfk_employee_idforeignkey(employee_id)referencest_employees(employee_id);insertintot_salary(salary_id,employee_id,month,salary)values(31,20,1月,5000);,17.2修改数据,像其他数据库一样,Oracle使用update命令来修改数据。update修改数据一般有以下几种情况:直接修改单列的值、直接修改多列的值、利用where子句限制修改范围和利用视图修改数据。利用视图修改数据往往需要利用insteadof触发器实现,因此本节将着重讲述前三种更新方式。,17.2.1利用update修改单列的值,update可以修改单列的值。updatepeoplesetstatus=CXL;select*frompeople;,17.2.2利用update修改多列的值,update命令既可以修改单列值,也可以同时修改多列的值。例如,有时为了合并两个表的数据,需要为其中一个的主键id添加一个基数,以避免两个表中主键的重复。此时,需要修改表中所有id的值。以表people为例,在修改列id的值的同时,也可以修改status列的值。updatepeoplesetid=(20000+id),status=ACT;,17.2.3利用where子句限制修改范围,where子句是update命令最常用的子句。不使用where子句的update命令是不安全的。因为不使用where子句将一次性修改表中所有记录,这将带来极大的安全隐患。为了将表people中,id大于20010的status列修改为“CXL”则可以利用如下所示的SQL语句。updatepeoplesetstatus=CXLwhereid20010;,17.3删除数据,数据删除的目标是数据表中的记录,而不是针对列来进行的。删除数据应该使用delete命令或者truncate命令。其中delete命令的作用目标是表中的某些记录,而truncate命令的作用目标是整个数据表。,17.3.1用delete命令删除数据,像update命令一样,delete命令经常与where子句一起出现,以删除数据表中的某些数据。deletefrompeoplepwhereexists(select1fromt_employeesewheree.employee_name=)delete命令用于删除表中数据;frompeoplep用于指定删除的目标表为people,并指定该表的别名为p;whereexists(select1fromt_employeesewheree.employee_name=)用于指定删除记录的过滤条件在表t_employees中存在着一条记录,该记录的employee_name列值等于表people的当前记录的name列值;该删除语句用于保证表people中,所有的姓名不再存在于表t_employees中。注意与说明:delete命令是针对表中的整条记录,因此,其后不需要指定列名或者*。例如,执行delete*frompeople,Oracle将抛出错误提示。,17.3.2用truncate命令删除数据,truncate命令删除数据和delete命令删除数据主要有三点不同。truncate命令属于DDL(数据库定义语言)范畴,而delete命令是DML(数据库操作语言)范畴。truncate命令将一次性删除数据表的所有数据,而delete语句将对数据表中所有记录进行循环处理。truncate命令删除的数据将不能回滚,而delete语句在提交修改之前,仍然可以回滚操作。truncatetablepeople;,17.4数据提交与回滚,Oracle中有回滚段的概念。Oracle中的回滚段是指,当DML修改数据库时,用于存储原数据影像的存储空间。当DML修改数据库中的数据(例如,update和delete命令)之后,执行提交之前,如果执行了回滚操作,Oracle将利用回滚段中的数据影像将数据库恢复到修改前的状态。,17.4.1回滚动作,回滚动作有两种情况,一是用户在提交动作之前,手动执行rollback命令,以放弃该事务对数据库的修改;二是事务执行失败,数据库自动执行rollback命令,来恢复事务对数据库的修改。select*frompeople;insertintopeoplevalues(1,周璇,ACT);rollback;select*frompeople;,17.4.2提交动作,提交动作是指将数据库的修改操作反映到数据库,不再允许使用回滚操作。insertintopeoplevalues(1,周璇,ACT);commit;select*frompeople;rollback;select*frompeople;,17.4.3PL/SQLDeveloper中的回滚与提交,在PL/SQL中,同样可以利用图形化界面来处理回滚与提交动作。insertintopeoplevalues(2,刘祥,ACT);,17.5本章实例,本章重点讲述了如何使用命令进行数据更新。但是很多时候,开发员使用工具直接修改数据会更加直观。createtabletest_peopleasselect*frompeople;select*fromtest_peopleorderbyidforupdate;,17.6本章小结,由于利用update更新数据表和利用delete删除表中数据,语法简单,而且为大多数读者所熟悉,所以本章只进行了简单介绍。需要注意的是利用truncate删除表中数据和利用delete删除数据的区别:truncate命令是DDL,数据删除之后,不可回滚;而delete命令是DML,数据删除之后,可以利用rollback进行回滚。就速度而言,truncate命令要快于delet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论