第十一章 Oracle体系结构(DBA)
数据库 Database
一系列物理文件(数据文件、控制文件、联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库
物理存储结构
数据文件、重做日志文件、控制文件
Desc v$logfile
Select member from v$logfile;
v$controlfile
v$datafile
逻辑存储结构
表空间、段、区、块
数据库实例 Database Instance
Oracle内存结构和后台进程被称为数据库的实例
Oracle实时应用集群 RAC,Real Application Clusters
数据库服务名 Database Service_Name
网络服务名 Net Service Name
监听器 Monitor
第十二章 DDL数据定义语言
创建表
Create table tblName (
Sid number(10),
Sname varchar2(20)
) tablespace tt;
说明:tablespace不是必须的。默认不写,则创建在登录用户所在的表空间上。
使用子查询创建表
Create table tblName as select * from emp;
Create table tblName as select * from emp where 1=2; --复制表结构
字段操作
Alter table student add age number(5); --增加字段
Alter table student modify age number(10) ; --修改字段
Alter table student rename column col1 to col2; --修改字段名称
Alter table student drop column age; --删除字段
清空表中数据
Truncate table student; --截断表清空数据,与”delete from table where 1=1;”不同。
正常情况下删除数据,如果发现删除错了,则可以通过rollback回滚。如果使用了截断表(http://blog.csdn.net/kiqiNie/article/details/8196448),则表示所有的数据不可恢复了。所以数据很快(比delete语句要快)。
删除表
Drop table tblName;
重命名表
Rename tbl1 to tbl2;
第十三章 DML 数据操作语言
Insert语句
Insert into tblName (columns…) values (values…);
insert into dept1(id, name) select deptno,dname from dept; --表间数据拷贝
update语句
update tblName set col=value where id=idVal; --更新id为idval的col列的值为value
update tblName set (cols) = (sub select ) where id=idVal; --更新id为idval的cols为子查询的结果,子查询必须返回一条记录。如果子查询返回的是空,则cols字段的值也会更新成NULL.
delete语句
delete from tblName;
delete from tblName where id=idVal;
merge语句(http://blog.csdn.net/launch_225/article/details/7833907)
merge的功能是可以根据一张表的数据去更新另一张表。
Merge into tbl1 --更新应用到tbl1
Using tbl2 --条件表tbl2
On(tbl1.col1 = tbl2.col2) --关联条件
When matched then --匹配的时候执行的语句
Insert/update/delete statement.
When not matched then --不匹配的时候执行的语句
Insert/update/delete statement.
第十四章 Constraint约束
约束就是指对插入数据的各种限制,例如:人员的姓名不能为空,人的年龄只能在0~150岁之间,约束可以对数据库中的数据进行保护。
约束可以在建表的时候直接声明,也可以为已建好的表添加约束。
NOT NULL 非空约束
Create table person(
Pid number,
Name varchar(30) NOT NULL
)
PRIMARY KEY 主键约束
不能重复,不能为空。例如身份证号。
Pid number PRIMARY KEY
UNIQUE 唯一约束
值不能重复(空值除外),例如电话号码。
Tel varchar(50) UNIQUE
CHECK 条件约束
插入的数据必须满足某些条件,例如年龄。
Age number check(age between 0 and 150)
Foreign key 外键
引用其他表中的主键,插入的数据必须在其他表中存在。如人所在的部门。
DeptNo number REFERENCES dept(deptno) ON DELETE CASEDE
--建立约束:emp_deptno_fk,与dept中的deptno为主-外键关系
--CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno)
“ON DELETE CASEDE”—删除主键记录时,同时删除外键的所有记录
“ON DELETE SET NULL”—删除主键记录时,将所有外键的记录的字段值更改为NULL
(http://blog.csdn.net/zb0567/article/details/8071083)
Alter table tbl ADD CONSTRAINT emp_eid_pk PRIMARY KEY(eid);--主键
Alter table tbl ADD CONSTRAINT emp_tel_uk UNIQUE(tel);--唯一
Alter table tbl ADD CONSTRAINT emp_age_ck CHECK(age BETWEEN 0 AND 150);--检查
Alter table tbl ADD CONSTRAINT emp_dept_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno) ON DELETE CASCADE;--外键
约束操作
Alter table emp drop CONSTRAINT emp_eid_pk; --通过约束名删除
Alter table emp drop unique(tel); --直接删除约束
Alter table emp enable CONSTRAINT emp_dept_deptno_fk; --启用约束
Alter table emp disable CONSTRAINT emp_dept_deptno_fk; --禁用约束
第十五章 VIEW 视图
视图:是一个封装了各种复杂查询的语句,就称为视图。视图可以屏蔽一些表结构,只将用户需要的一些信息返回给用户,或者将复杂的查询语句以创建为视图,简化用户操作的同时,提升数据库安全性。
创建视图
CREATE VIEW viewName(colList) as subSelect
简历一个只包含20部门的雇员信息的视图(雇员的编号、姓名、工资)
Create view empv20 (empno,ename,sal) as select empno,ename,sal from emp where deptno=20;
CREATE OR REPLACE VIEW viewName … --如果存在同名视图,则替换原有视图
更新视图数据
直接更新数据
Update empv20 SET deptno=30 where empno=7369; --更新成功
默认情况下创建的视图,如果更新了,则会自动将此数据从视图中删除,之后会更新原本的数据。
如果这样做的话,肯定存在问题,以为内视图最好不要更新源表数据。
可通过以下参数限制视图的更新:
WITH CHECK OPTION保护视图的创建规则
Create or replace view empv20(empno,ename,sal,deptno) as select empno,ename,sal,deptno from emp where deptno=20 WITH CHECK CONSTRAINT empv20_ck;
执行
Update empv20 SET deptno=30 where empno=7369; --视图时按照部门编号建立的,更新失败。
Update empv20 SET ename=’tom’ where empno=7369; --更新成功,
WITH READ ONLY只读,不可修改
Create or replace view empv20(empno,ename,sal,deptno) as select empno,ename,sal,deptno from emp where deptno=20 WITH READ ONLY;
现在任意的字段都不可更改,所以现在的视图是只读的。
查看视图
Select cols from user_view; --查询视图数据
----------------------------------------------------------------------------------------------
张文海