Oracle中SQL更新数据

上传人:宝路 文档编号:50042940 上传时间:2018-08-06 格式:PPT 页数:21 大小:130.79KB
返回 下载 相关 举报
Oracle中SQL更新数据_第1页
第1页 / 共21页
Oracle中SQL更新数据_第2页
第2页 / 共21页
Oracle中SQL更新数据_第3页
第3页 / 共21页
Oracle中SQL更新数据_第4页
第4页 / 共21页
Oracle中SQL更新数据_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《Oracle中SQL更新数据》由会员分享,可在线阅读,更多相关《Oracle中SQL更新数据(21页珍藏版)》请在金锄头文库上搜索。

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

2、.1.1 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 s

3、elect 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、4 insert语句与唯一性约束当使用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子句限制修改范围where

7、子句是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命令删除数据主要有三 点不同。ltruncate命令属于DDL(数据库定义语言)范畴,而 delete命令是DML(数

10、据库操作语言)范畴。ltruncate命令将一次性删除数据表的所有数据,而 delete语句将对数据表中所有记录进行循环处理。ltruncate命令删除的数据将不能回滚,而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;ro

12、llback;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 本章小结由于利用upda

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

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

当前位置:首页 > 中学教育 > 教学课件

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