数据库(oracle)复习day2(集合运算、DML数据操作、数据库事务、创建和管理表) 下午

1 集合运算符

1.1 UNION/UNION ALL 并集

UNION运算符 返回 两个集合去掉重复元素后的所有记录。
UNION ALL 返回两个集合的所有记录,包括重复的。

1.2 INTERSECT 交集

INTERSECT 运算符返回同时属于两个集合的记录

1.3 MINUS 差集

MINUS返回属于第一个集合,但不属于第二个集合的记录。

1.4 集合运算的注意事项

  1. select语句中参数类型和个数要一致。
  2. 可以使用括号改变集合执行的顺序
  3. 如果有order by子句,必须放到每一句查询语句后
  4. 集合运算采用第一个语句的表头作为表头

—显示薪水同时位于级别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";	可以访问表
	结论:通过回收站的名字,查看原来表的内容,需要双引号

猜你喜欢

转载自blog.csdn.net/qq_40858438/article/details/89217135