UPDATE table[alias]
SET column[,column….] = {expression, subquery} [WHERE condition]; 命令由三部分组成: ? ? ?
例如:修改EMP表中SCOTT的记录数据,把他调到销售部,并且工资提高10%,具体命令如下:
UPDATE EMP
SET JOB =’SALESMAN’, HIREDATE = SYSDATE, SAL = SAL*1.1
WHERE ENAME = ‘SCOTT’; 1 record updated.
3. Delete命令
Delete命令用来从表中删除一行或多行记录。命令格式如下:
DELETE FROM table [WHERE condition]; 该命令由两部分组成:
? 关键字delete from 后跟准备要从中删除数据的表名,这是必不可少的。 ?
关键字where后跟删除条件,是可选项;如果不用WHERE子句,数据表中的所有记录将被删除。
update后跟一个或多个要修改的表,这部分是必不可少的。 set后跟一个或多个要修改的表列,这也是必不可少的。
where后跟查询条件,这是选项;如果WHERE子句忽略,UPDATE命令将修改数据表中所有记录。
例如删除EMP表中部门号是10的记录:
DELETE FROM EMP WHERE DEPTNO = 10;
4. 事务(Transaction)
事务是由一串修改数据库的操作组成的。Oracle中有两种事务:DML事务和DDL事务。DML事务是一些DML语句组成的,Oracle把事务作为单个实体或逻辑工作单元来处理;DDL事务只能由一条DDL语句组成。
事务的执行必须是完整的,也就是说事务处理中一部分提交给数据库而其他部分不提交这是不允许的。对于事务来说,要么事务中所有处理都提交,要么所有的处理都放弃。 事务是以可执行的DML或DDL命令开始,以下面的情况结束: ? COMMIT/ROLLBACK
? DDL命令(DDL语句是自动提交) ? 一些错误(如死锁) ? 注销(如退出SQL*Plus) ? 硬件错误
1)、永久性修改
为了使修改变成永久性,这些修改必须提交给数据库。COMMIT命令可以用来使数据库永久性改变。而ROLLBACK可以撤消或放弃修改。在两次提交之间对数据库的修改就是事务。
第16页
2)、撤消修改
ROLLBACK可以放弃不提交的修改。ROLLBACK可以恢复上次提交之后修改过的数据。 3)、系统错误
事务被一些严重错误(例如系统错误)的中断时,它将自动回滚。这阻止了由错误造成的对数据不完整的修改,而恢复到最近提交之后的数据表的状态。用这种方式SQL*Plus保护了数据的完整性。自动回滚通常是系统错误造成的,例如断电或RESET。而在输入命令时的错误,例如拼写错误或没有授权的操作,不会造成事务的中断或者自动回滚。这是因为错误是在编译时而不是在运行时检测到的。 4)、用SQL语句控制事务 ⅰ)、COMMIT [WORK]; ? 使当前事务永久的修改。
? 清除这个事务中所有的保存点。 ? 结束事务。
? 释放事务中的锁操作。
? 关键字WORK是可选的。
一般情况下,应在应用程序中用COMMIT(或ROLLBACK)显式的结束事务。 隐式(自动)结束事务在下列情况发生: ? DDL命令之前。 ? DDL语句之后。
? 和一个数据库正常断开之后。 ⅱ)、SAVEPOINT savepoint_name
? 保存点能把事务分割成更小的部分。 ? 保存点允许在任意点阻止工作的进行。
? 如果第二个保存点的名字和第一个保存点的名字相同,那么第一个保存点自动失效。 ? 保存点的最大数默认是5;但可以修改。
ⅲ)、ROLLBACK [WORK] to [SAVEPOINT] savepoint_name ROLLBACK语句用来撤消工作。
? 关键字WORK是可选的。SAVEPOINT也是可选的。 ? 如果ROLLBACK语句中没有TO SAVEPOINT子句,那么它将结束事务;回滚这个事务中所有的操作;清除这个事务中所有的保存点;释放这个事务的锁操作。
三.上机内容
1.用Insert在基本表customer中插入数据
SQL>insert into customer values (‘Nicholson’,’CA’,6989.99); 1 row created.
SQL>insert into customer values (‘Martin’,’CA’,2345.45); 1 row created.
SQL>insert into customer values (‘Laursen’,’CA’,34.34); 1 row created.
SQL>insert into customer values (‘Bambi’,’CA’,1234.55); 1 row created.
SQL>insert into customer values (‘McGraw’,’NJ’,123.45); 1 row created.
第17页
2.在表STATE中插入指定的字段
SQL>insert into state (state_name,state_cd)
2 values (‘Massachusetttes’,’MA’); 1 row created.
SQL>insert into state (state_name,state_cd) 2 values (‘California’, ’CA’); 1 row created.
SQL>insert into state (state_name,state_cd) 2
values (‘NewJersey’,’NJ’);
1 created.
SQL>insert into state (state_name,state_cd) 2 values (‘NewYork’,’NY’); 1 created.
3.修改数据
把state表中NewYork改为Florida,NY改为FD:
UPDATE state SET state_name = ‘Florida’, state_cd = ‘FD’ where state_name = ‘NewYork’ and state_cd = ‘NY’;
4.删除数据
从STATE表删除state_name为Florida和state_cd为FD的记录: DELETE FROM STATE WHERE state_name = ‘Florida’ AND state_cd = ‘FD’;
四.上机作业
1.用INSERT 命令输入数据
表3-1 基本表S的数据 S1 WANG 20 M S2 LIU 19 M S3 CHEN 22 M S4 WU 19 M S5 LOU 21 F S8 DONG 18 F
表3-2 基表C的数据 C2 MATHS MA C4 PHYSICS SHI C3 CHEMISTRY ZHOU C1 DB LI C5 OS WEN
第18页
表3-3
C# S# C1 C2 C3 C4 C5
基本表SC的数据(空格为未选修) S1 80 70 85 90 70 S2 85 NULL NULL S3 90 85 95 S4 75 NULL 70 S5 70 60 80 65 S8 90 NULL 90 NULL 2.对S、C、SC表进行操作: 1)、把C2课程的非空成绩提高10%。 2)、在SC表中删除课程名为PHYSICS的成绩的元组。 3)、在S和SC表中删除学号为S8的所有数据。
3.在PROJECTS数据库表中增加下列记录: PROJID 1 2 P_DESC WRITE C030 COURSE PROOF READ NOTES P_START_DATE 02-JAN-88 01-JAN-89 P_END_DATE 07-JAN-88 10-JAN-89 BUDGET_AMOUNT 500 600 MAX_NO_STAFF 1 1 COMMENTS BR CREATIVE YOUR CHOICE
4.在ASSIGNMENTS数据库表中增加下列记录: PROJID 1 1 2 EMPNO 7369 7902 7844 A_START_DATE 01-JAN-88 04-JAN-88 01-JAN-89 A_END_DATE 03-JAN-88 07-JAN-88 10-JAN-89 BILL_RATE 50.00 55.00 45.50 ASSIGN_TYPE WR WR PF HOURS 15 20 30
5.把ASSIGMENTS表中ASSIGNMENT TYPE的WR改为WT,其他的值不变。 6.在PROJECTS 和ASSIGNMENTS插入更多的记录。 7.删除自己随意插入的记录。
第19页
第四章 数据查询
一.上机目的
1.掌握Select语句的运用。 2.掌握一些函数的应用。 3.掌握子查询的运用。 4.连接和分组的应用。
二.预备知识
1.Select语句
Select命令用于从Oracle数据库中检索数据。利用select命令告诉数据库要检索什么样的信息。Select是最常用的SQL语句,select命令(如下)有六个基本部分构成:
SELECT [DISTINCT] {*,COLUMN [ALIAS],……}
FROM table WHERE condition(s)
ORDER BY {column,exper} [ASC|DESC] GROUP BY {column,exper}
HAVING having_condtions; i. Select后跟用户需要检索的信息(如下一部分将要提到的表中表列的名字)。这是select命令必不可少的部分。 ii. From后跟检索对象(如存放数据的一个或多个表的名称),from部分也是必不可少的。 iii. iv.
Where后跟检索条件(如限制检索内容的条件),where部分是可选的。 Order by 后跟分类准则(如取自空值数据如何给出的第一部分的表列名称表),order
by 部分是可选的。
v. Group by后跟分组的字段或准则。 vi. Having后跟分组的查询条件。
下面我们首先使用select语句操作名为user_tables的数据字典视图: SQL>select *
2 from user_tables
3 where table_name = ‘customer’; TABLE_NAME
TABLESPACE_NAME
CLUSTER_NAME
IOT_NAME PCT_FREE PCT_USED
INI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS
FREELIST_GROUPS LOG B NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS
第20页