oracle 复习day2 (集合运算、DML数据操作、数据库事务、创建和管理表)下午
1 集合运算符
1.1 UNION/UNION ALL 并集
UNION运算符 返回 两个集合去掉重复元素后的所有记录。
UNION ALL 返回两个集合的所有记录,包括重复的。
1.2 INTERSECT 交集
INTERSECT 运算符返回同时属于两个集合的记录
1.3 MINUS 差集
MINUS返回属于第一个集合,但不属于第二个集合的记录。
1.4 集合运算的注意事项
- select语句中参数类型和个数要一致。
- 可以使用括号改变集合执行的顺序
- 如果有order by子句,必须放到每一句查询语句后
- 集合运算采用第一个语句的表头作为表头
—显示薪水同时位于级别1(700-1300),但不属于级别2(1201~1400)的员工信息
select ename, sal from emp
where sal between 700 and 1300
minus
select ename, sal from emp
where sal between 1201 and 1400;
2 DML数据操作
1.DML语句 (Data Manipulation Language) 数据库操作语言
命令:insert delete update select 增删改查
2.DDL语言 (data definition Lanaguage) 数据库定义语言
create table
create view index sequence synonym同义词
truncate table
3.DCL语言 (data control language) 数据控制语言
commit rollback savetpointe
2.1 insert语法
– 1插入数据
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
– 2插入一个完整数据
insert into emp values(1, 'aaaa1', 'job1', 7902, '17-12月-80', 8000, NULL, 20);
– 3插入一个不完整数据
insert into emp (empno, ename, job, deptno) values (2, 'aaa2', 'job2', 20);
– 4插入空值有两种方式
隐式的插入空值和显示的
–5插入日期
insert into emp values(4, 'aaaa4', 'job1', 7902, to_date('1982-02-04 18:22:30', 'yyyy-mm-dd hh24:mi:ss'), 8000, NULL, 20);
– 6取地址
insert into emp (empno, ename, job, deptno) values (&empno, 'aaa2', 'job2', &deptno);
– 7回退事务
rollback;
2.2 新创建一个表
create table t1
as
select * from emp where 1=2;
–从emp表中 把10号部门的员工信息,插入到t1表中
insert into t1
select * from emp where deptno = 10;
//子查询不光在select中使用,而且可以在 insert语言中
2.3 更新数据
UPDATE table
SET column = value [, column = value, …]
[WHERE condition];
update t1 set deptno=20
where EMPNO = 7782
2.4 删除数据
DELETE [FROM] table
[WHERE condition];
delete from t1 ; --删除表中的所有数据
truncate table t1; --删除表中的所有数据
delete from t1 where empno = 7782; --删除一条数据
2.5 delete和truncate表区别
1 delete逐条删除 truncate先摧毁表再重建
2 delete语言是DML语言 truncate是DDL
DML语言可以闪回 做错的并且提交了.可通过闪回,撤销操作
DDL语言不可以闪回 flashback
3 delete是逐条删除,会产生碎片, truncate不会产生碎片
行移动功能: 要开启闪回功能,必须要开启行移动功能
4 delete不会释放空间 truncate会
5 delete可以回滚 truncate不可以
6 oracle delete快 mysql truncate快. —SQL5 语言
3 数据库事务概念
3.1 基本概念
概念 一个或者多个DML语言组成
特点 要么都成功,要么都失败
特性 原子性 一致性 隔离性 持久性
事物的隔离性 多个客户端同事操作数据库的时, 要隔离他们的操作
否则:脏读 不可重复读 幻读
设置不同的搁置级别来解决
3.2 事务开始和结束
oracle中的事务
1 事务起始标志 DML语言 (oracle默认事务是打开的)
2 事务的结束标志
提交: 显示提交commit
隐式提交
1) 执行DDL语言
eg:create table语言 还有I个隐式的功能
提交之前的没有提交的DML语言(insert update)
2) 正常退出
回滚: 显示 rollback
隐式 掉电/宕机/非正常退出==系统出错了
3.3 oracle事务控制
–保存点
create table testsavepoint (tid number, tname varchar2(20));
set feedback on
insert into testsavepoint values(1, ‘tom1’);
insert into testsavepoint values(2, ‘tom2’);
savepoint a; //创建一个保存点
insert into testsavepoint values(3, 'tom3a);
rollback to savepoint a;
注意: 回退到savepoint a 前面插入的两条sql语句还没有提交; 仍然还在一个事务里面;
让事务结束的方法 显示 隐式
SQL> rollback / commit
3.4 oracle数据的隔离级别问题
read only ,数据库几乎不做串行化操作,增加了read only
4 有关创建表和删除表
创建表必须具备:
CREATE TABLE权限
存储空间
4.1 创建表
CREATE TABLE [schema.]table
(column datatype [ DEFAULT expr ] [ , ... ]);
create table t4 (sid number,
name varchar2(40),
sdata, data DEFAULT sysdate);
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
alter table t6 add (sid2 number);
alter table t6 modify tname varchar2(40);
–删除列语法:
ALTER TABLE table
DROP column (column);
示例:
alter table test1 drop column image ;
–重命名列名语法:
ALTER TABLE table_name rename column old_column_name to new_column_name
示例:
alter table test1 rename column tname to username;
4.2 删除表
drop table test1;
–oracle的回收站
– 查看回收站 show recyclebin
– 清空回收站 purge recyclebin;
– 彻底删除一张表
drop table test1 purge; --直接删除一张表,不通过回收站
– 还原表(从回收站中返复原表)
闪回的内容
–关于回收站注意问题
–并不是所有的人都有回收站 管理员没有回收站
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP20 BIN$yB56S7m9QCacFW9wbkk4Ig==$0 TABLE 2014-08-10:22:48:43
SQL> select * from emp20; 不可以访问表
SQL> select * from BIN$yB56S7m9QCacFW9wbkk4Ig==$0 不可以访问表
SQL> select * from "BIN$yB56S7m9QCacFW9wbkk4Ig==$0"; 可以访问表
结论:通过回收站的名字,查看原来表的内容,需要双引号