Oracle中SQL更新数据.ppt

上传人:xin****828 文档编号:15821358 上传时间:2020-09-08 格式:PPT 页数:21 大小:324.82KB
收藏 版权申诉 举报 下载
Oracle中SQL更新数据.ppt_第1页
第1页 / 共21页
Oracle中SQL更新数据.ppt_第2页
第2页 / 共21页
Oracle中SQL更新数据.ppt_第3页
第3页 / 共21页
资源描述:

《Oracle中SQL更新数据.ppt》由会员分享,可在线阅读,更多相关《Oracle中SQL更新数据.ppt(21页珍藏版)》请在装配图网上搜索。

1、SQL更新数据,Oracle中可以利用DML更新数据。其DML语句与其他数据库的SQL语法完全一致都是遵守了工业标准。与查询操作不同,更新数据将导致数据库状态的变化,因此,Oracle同样提供了提交与回滚操作来保证数据库状态的一致性。Oracle常见的更新操作包括: 插入数据; 修改数据; 删除数据。,17.1 插入数据,插入数据即向数据表中插入新的记录,插入数据应该使用insert命令。插入数据的主要途径包括:通过指定各列的值直接插入、通过子查询插入、通过视图插入等。对于通过视图插入的方式,大多数应该使用instead of触发器来进行处理,因此,本章将着重讲述前两种插入方式。,17.1.1

2、 insert语句向表中插入数据,insert into people values(people_seq.nextval, 张文, ACT); insert into people (id, name) values(people_seq.nextval, 柳平); 注意与说明:当使用第二种方式插入数据时,列名列表和列值列表必须保持一致,即每个列的数据类型和实际插入类型保持一致。,17.1.2 利用子查询批量插入数据,Oracle可以利用子查询向表中批量插入数据。此时的SQL语句除了包含insert into命令之外,还应该包含一个查询语句。 insert into people selec

3、t employee_id, employee_name, status from t_employees where employee_id=3;,17.1.3 insert语句与默认值,当向数据表中插入数据时,如果表中某列含有默认值约束,对于该列又没有显式赋值,那么默认值将作为列值进行插入。 alter table people modify (status varchar2(3) default ACT); insert into people (id, name) values (12, 殷商); select * from people where id = 12;,17.1.4 i

4、nsert语句与唯一性约束,当使用insert语句时,需要注意的是唯一性约束。当插入的列值违反了唯一性约束时,Oracle将抛出错误。例如,表people中,列id为表的主键,尝试向其中插入数据: insert into people values(11, 张三, ACT) 对于数值型主键来说,在插入数据时,使用序列来获得主键值是一个好的选择。,17.1.5 insert语句与外键约束,insert语句更新数据表时,同样会引起外键约束的检查。 alter table t_salary add constraint fk_employee_id foreign key (employee_id)

5、 references t_employees (employee_id); insert into t_salary (salary_id, employee_id, month, salary) values (31, 20, 1月, 5000);,17.2 修改数据,像其他数据库一样,Oracle使用update命令来修改数据。update修改数据一般有以下几种情况:直接修改单列的值、直接修改多列的值、利用where子句限制修改范围和利用视图修改数据。利用视图修改数据往往需要利用instead of触发器实现,因此本节将着重讲述前三种更新方式。,17.2.1 利用update修改单列的值

6、,update可以修改单列的值。 update people set status = CXL; select * from people;,17.2.2 利用update修改多列的值,update命令既可以修改单列值,也可以同时修改多列的值。例如,有时为了合并两个表的数据,需要为其中一个的主键id添加一个基数,以避免两个表中主键的重复。此时,需要修改表中所有id的值。以表people为例,在修改列id的值的同时,也可以修改status列的值。 update people set id = (20000+id), status = ACT;,17.2.3 利用where子句限制修改范围,whe

7、re子句是update命令最常用的子句。不使用where子句的update命令是不安全的。因为不使用where子句将一次性修改表中所有记录,这将带来极大的安全隐患。为了将表people中,id大于20010的status列修改为“CXL”则可以利用如下所示的SQL语句。 update people set status = CXL where id 20010;,17.3 删除数据,数据删除的目标是数据表中的记录,而不是针对列来进行的。删除数据应该使用delete命令或者truncate命令。其中delete命令的作用目标是表中的某些记录,而truncate命令的作用目标是整个数据表。,17.

8、3.1 用delete命令删除数据,像update命令一样,delete命令经常与where子句一起出现,以删除数据表中的某些数据。 delete from people p where exists(select 1 from t_employees e where e.employee_name = p.name) delete命令用于删除表中数据;from people p用于指定删除的目标表为people,并指定该表的别名为p;where exists(select 1 from t_employees e where e.employee_name = p.name)用于指定删除记录

9、的过滤条件在表t_employees中存在着一条记录,该记录的employee_name列值等于表people的当前记录的name列值;该删除语句用于保证表people中,所有的姓名不再存在于表t_employees中。 注意与说明:delete命令是针对表中的整条记录,因此,其后不需要指定列名或者*。例如,执行delete * from people,Oracle将抛出错误提示。,17.3.2 用truncate命令删除数据,truncate命令删除数据和delete命令删除数据主要有三点不同。 truncate命令属于DDL(数据库定义语言)范畴,而delete命令是DML(数据库操作语言

10、)范畴。 truncate命令将一次性删除数据表的所有数据,而delete语句将对数据表中所有记录进行循环处理。 truncate命令删除的数据将不能回滚,而delete语句在提交修改之前,仍然可以回滚操作。 truncate table people;,17.4 数据提交与回滚,Oracle中有回滚段的概念。Oracle中的回滚段是指,当DML修改数据库时,用于存储原数据影像的存储空间。当DML修改数据库中的数据(例如,update和delete命令)之后,执行提交之前, 如果执行了回滚操作,Oracle将利用回滚段中的数据影像将数据库恢复到修改前的状态。,17.4.1 回滚动作,回滚动作有

11、两种情况,一是用户在提交动作之前,手动执行rollback命令,以放弃该事务对数据库的修改;二是事务执行失败,数据库自动执行rollback命令,来恢复事务对数据库的修改。 select * from people; insert into people values (1, 周璇, ACT); rollback; select * from people;,17.4.2 提交动作,提交动作是指将数据库的修改操作反映到数据库,不再允许使用回滚操作。 insert into people values (1, 周璇, ACT); commit; select * from people; rol

12、lback; select * from people;,17.4.3 PL/SQL Developer中的回滚与提交,在PL/SQL中,同样可以利用图形化界面来处理回滚与提交动作。 insert into people values (2, 刘祥, ACT);,17.5 本章实例,本章重点讲述了如何使用命令进行数据更新。但是很多时候,开发员使用工具直接修改数据会更加直观。 create table test_people as select * from people; select * from test_people order by id for update;,17.6 本章小结,由

13、于利用update更新数据表和利用delete删除表中数据,语法简单,而且为大多数读者所熟悉,所以本章只进行了简单介绍。需要注意的是利用truncate删除表中数据和利用delete删除数据的区别:truncate命令是DDL,数据删除之后,不可回滚;而delete命令是DML,数据删除之后,可以利用rollback进行回滚。就速度而言,truncate命令要快于delete命令,因此,当确定要删除表中所有数据,只保留数据表结构时,应该使用truncate命令(这往往发生在数据清理,例如,删除测试数据);而删除表中部分数据应该使用delete命令。,17.7 习题,1如何利用insert命令实现批量插入。 2如何利用update命令修改多列的值。 3简述利用delete命令与truncate命令删除数据的区别。 4.简述提交动作与回滚动作的区别。,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!