当前位置:文档之家› oracle笔记

oracle笔记

oracle

1.数据库:存储数据,通过sql语言(或其他语言)有效地管理数据,在项目开发中有 重要的地位。
2.RDBMS-->Relation Database Management System
//关系数据库管理系统
3.一个认知:
认知oracle:oracle是一种关系型数据库,是一家提供产品和服务的厂商(甲骨文公司),是全球第一大数据库厂商,是全球第二大ERP软件厂商。
4.二个概念:
1).数据库:存储并有效地管理数据;
2).关系型数据库:数据库中存放的数据对象存在一定的关系;
5.三个名词:
1).SQL:第四代语言,只关心做什么,而不关心怎么做;
2).SQL*PLUS:是oracle的一种工具,可以执行sql或pl/sql语句,并且不显示执行后的结果;
3).pl/sql:过程化的语句;
6.四个层次:
一台台oracle服务器;
一个个oracle数据库;
一张张数据库;
一条条记录;
7.四个约束:
1).实体性完整性
针对PK(主键),要非空,唯一;
2).参照性完整性
针对FK(外键),可以为空;若不为空,外键在另一张表的主键中存在
3).列级约束
插入的数据要匹配定义的数据类型
4).用户自定义约束
选择性约束,值是规定的值
8.两个键:
1).主键:primark key--->pk
标识一条非空,唯一的记录
2).外键:foreign key--->fk
a.将两张表联系起来,依赖于另一张表主键的值;
b.可以为空,若不为空,其值在另一张表的主键中存在;
9.SQL命令的5个分类:
1).数据查询语句
select
2).数据操作语句(DML)
insert(插入),update(更新),delete(删除)
3).数据定义语句(DDL)
create(创建),alter(修改),drop(删除),rename(重命名),truncate (删除)
4).事务控制语句:
commit(提交),rollback(回滚),
5).数据控制语句:
crant(授权),revoke(回收授权)
10.6个对象:
1).Table 二维表:数据库中最基本的储蓄单位;
2).View 视图:一种虚表;
3).Sequence 序列:是oracle特有的,用来生成主键的值;
4).Index 索引:用来提高检索的效率;
5).Synonym 同义词:为对象取别名;
6).Program unit 过程化语句:pl/sql;
11.oracle的发展历程:
6i-->7i-->8i-->9i-->10g-->11g
g-->gridding网格
12.计算机语言的发展历程:
1)第一代语言:机器语言;
2)第二代语言:汇编语言;
3)第三代语言:高级语言(C,JAVA);
4)第四代语言:sql语言;
13.默认有两个用户:sys,system(权限sys>system)
14.dba用户:数据库管理员
15.登录到SQL*PLUS上的两种方式:
1)sqlplus 用户名/密码;
2)sqlplus
用户名:
密码:
16.在sql*plus工具上进行用户的切换:
conn 用户名/密码
17.startup 启动数据库
shutdown 关闭数据库
18.buffer:缓存!

保存最近使用的一条sql或pl/sql语句
19.oracle:甲骨文公司
20.oracle-->软件-->应用软件
21.desc:查看表结构;
ex:desc s_emp;


第一章
1.*:表示所有的数据;
2.select,from 在查询语句中必须有;
3.distinct 消除重复的数据
ex:select distinct name from s_emp;
4.默认 左对齐:字符,日期
右对齐:数字
5.数字类型可以进行的操作:+,-,*,/;
日期类型只能进行的操作:+,-;
6.处理空值的函数:
nvl(字段名,默认值);
nvl(commission_pct,0);
ex:select commission_pct,salary,(salary+nvl(commission_pct,0)*12) from s_emp;
7.取别名的三中种方法:
1)在需要别名的字段后空格在加上别名;
2)使用关键字as;
3)使用“”取别名,可以区分大小写或者显示特殊的字符;
ex:select scf "SCF" from table;
8.日期进行算术运算的单位是天
ex:select start_date,start_date+1 from s_emp;
注:将加1运算加到天上;
9.字符串的拼接:||
ex:查询员工的全名,并用,隔开
select first_name||','||last_name from s_emp;
select first_name||','||last_name||'in'||dept_id from s_emp;
注:对拼接时所加的字符串,符号都用单引号引起来;
10.oracle中字符串用单引号引起来;
11.sql*plus中的命令:(编辑时的命令)
l:显示buffer中的sql命令;
/:执行buffer中的sql命令;
1)替换 :c
先定位 n
c/需要替换的字符/替换后的字符;
2)追加 :a
先定位 n
a 追加的字符;
3)插入 :i
先定位 n
i 插入的内容;
4)删除:del
先定为 n
del 删除的内容;
12.sql*plus中对文件的命令:
1).save filename:把buffer中的命令保存到文件中去;
2).get filename:把文件中的内容显示到buffer上;
3).start filename:执行脚本文件;
4).@ filename:执行脚本文件;
5).edit filename:编辑文件;
6).spoolfilename: ex:spool D:/spool.sql
spool off: 刷新,保存在spool.sql中的一些命令及对应的结果;
7).exit:退出工具;
13.设置头文件:
1).可以将COLOMN简写为col;
2).format 不能设置数字类型(可以是日期,字符串类型);
ex:col first_name format a15;
3).col last_name clear 取消这一行的设置;


第二章

order by:用于排序(最后执行)

1.升序:ASC(默认)
2.降序:DESC

例:查询所有员工的last_name和工资,并对工资进行升序排列?
select last_name,salary
from s_emp
order by salary ASC; <=>order by 2 ASC;

注:order by 后面可以跟字段名,或者select后的序列号或者别名

例:查询所有员工的last_name和工资,并对last_name进行降序排序?
select last_name,salary
from s_emp
order by last_name DESC;

例:查询所有员工的last_name和工资,先对工资进行升序排序,再

对last_name进行降序排序?
select last_name,salary
from s_emp
order by salary ASC,last_name DESC;

注:多个字段进行排序:先按着order by后面第一个字段进行排序,如果第一个字段的值相, 就按照第二个进行排序,如果第一和第二字段的都相同,就按照第三个字段进行排序, 以此类推。(先满足order by后的第一个规则)

//对空值进行排序
select last_name,salary,commission_pct
from s_emp
order by 3 ASC;

对空值进行排序:升序排序,空值排在最后,
降序排序,空值排在最前。

where限定性查询的条件(where 后面出现表达式)

例:查询42号部门的员工信息?
select last_name,salary
from s_emp
where dept_id=42;

例:查询工资大于两千的员工信息?
select last_name,salary
from s_emp
where salary>2000;

//and 条件并且的关系
例:查询工资大于一千小于两千的员工信息?
select last_name,salary
from s_emp
where salary>1000 and salary<2000;

//between and 两者之间
select last_name,salary
from s_emp
where salary between 1000 and 2000;

//or 或者
例:查询41号或者42号部门员工的信息?
select last_name,salary
from s_emp
where dept_id=41 or dept_id=42;

//in(list)--->(list)指一个集合或者区间
//not in(list)
select last_name,salary
from s_emp
where dept_id in(41,42,43,44);

//null 为空(只能用is,不能用=)
//is not null 不为空
查询奖金为空的员工信息?
select last_name,salary,commission_pct
from s_emp
where commission_pct is null;

模糊查询:like
三个通配符:
1)_:匹配单个字符
2)?:匹配0个或者1个字符
3)%:匹配0个或者多个字符

book(name)
select name
from book
where lower(name) like '%java%'

查询last_name中包含‘n’的员工的信息?
select last_name,salary
from s_emp
where lower(last_name) like '%n%'; //先将last_name转化为小写的,便于与n匹配
/where upper(last_name) like '%N%';//先将last_name转化为大写的,便于与N匹配

查询last_name中以‘N’开头的员工的信息?
select last_name,salary
from s_emp
where last_name like 'N%';

insert into s_emp
values(999,'_briup',null,null,null,null,null,null,null,null,null);
commit;

转义字符:escape '/'(单引号里面的符号可任意)
select last_name
from s_emp
where last_name like 'a_%' escape 'a';
(where last_name like '/_%' escape '/';)


第三章

字符串上的函数:
1.LOWER:转化成小写
select lower('HELLO World')
from dual;
2.UPPER:转化成大写
select upper('hello WORld')
from dual;
3.INITCAP:每个单词的首字母大写,其他字母小写
4.CONCAT:字符串连接函数
select concat('Hello','world')
from dual;
5.SUBSTR:取字符串的子串
select substr('hello word',3,6)//3代表第三个字符,6代表6个长度
from dual;
llo wo
6.LENGTH:返回

长度
select length('hello world')//空格也算一个字符
from dual;
7.NUL:处理空值的函数

//哑表:dual(只显示表的结构)

例:查询员工的全名和工资,并且全名以大写的方式显示,并且first_name的长度大于6,最后工资降序排序?
select upper(last_name||''||first_name),salary
from s_emp
where length(first_name)>6
order by salary DESC;

在数字类型上的函数:
1.ROUND:四舍五入
select round(45.63) from dual;//46
select round(45.63,0) from dual;//46
select round(45.63,1) from dual;//45.6
select round(45.63,2) from dual;//45.63
select round(45.63,-1) from dual;//50
select round(65.63,-2) from dual;//100
select round(44.43,-1) from dual;//40
select round(44.43,-2) from dual;//0
select round(54.43,-2) from dual;//100
注:round(x,y)中,y为大于0的数时,小数点右移,保留小数点y位;
y为小于0的数时,小数点左移;
2.TRUNC:只舍不取
select trunc(45.63) from dual;//45
select trunc(45.63,-2) from dual;//0
select trunc(45.63,-1) from dual;//40
select trunc(64.63,-1) from dual;//60
select trunc(64.63,-2) from dual;
3.MOD:取余
select mod(1500,400) from dual;//300

例:查询当前的时间:
select sysdate from dual;
alter session set nls_date_language=english;//更改时间为英文的
4.MONTHS_BETWEEN:(精确到毫秒)
注:后面日期减去前面的日期
select months_between(sysdate,'13-JUN-12') from dual;//2
select months_between('13-JUN-12',sysdate) from dual;//-2
5.ADD_MONTHS:在某个日期上增加一个月份后的日期
select add_months(sysdate,2) from dual;//13-OCT-12
6.NEXT_DAY:即将来临的星期几的日期
select next_day(sysdate,6) from dual;//17-AUG-12
select next_day(sysdate,'friday') from dual;//17-AUG-12
https://www.doczj.com/doc/d23680373.html,ST_DAY:一个月的最后一天的日期
select last_day(sysdate) from dual;
select last_day('12-JUN-12') from dual;
8.ROUND:四舍五入
通过年来四舍五入,对月来进行判断
select round(to_date('25-MAY-95'),'MONTH') from dual;
通过月来四舍五入,对天来进行判断
select round(to_date('25-MAY-95'),''YEAR) from dual;
注:
对于month:15舍16取;
对于year:6舍7取;
9.TRUNC:取余

转化函数
1.to_char:将数字类型和日期类型转化为字符串类型
2.to_number:将字符串类转化为数字类型
3.to_date:将字符串类型转化为日期类型

select to_char(sysdate,'year') from dual;
日期显示:
select to_char(sysdate,'YYYY-Mon-DD hh24:mi:ss PM') from dual;
//2012-AUG-13 14:48:08 PM

注:
fm:去除空格和0
9:不满位数时不会强制补齐
0:不满位数时强制补齐
L:当前地区显示货币的符号
$:
select to_char(salary,'fm999,999.99') from s_emp;
select to_char(salary,'999,999.99') from s_emp;
select to_char(salary,'000,000.00') from s_emp;
select to_char(salary,'$000,000.00'

) from s_emp;//显示$符
select to_char(salary,'L000,000.00') from s_emp;//显示¥符

注:to_number(char)--->char为数字类型
select to_number('45') from dual;//45
select to_date('10 September 1992 ',' dd Month YYYY ') from dual;
select to_date('10-JUN-1992') from dual;


第四章:多表的查询

实质:也是单表的查询

多表连接的时候会产生笛卡尔积
如何消除笛卡尔积?连接条件
如果有n张表,至少需要多少个连接条件才能消除笛卡尔积?n-1

连接方式:
1.等连接:连接条件用等号来连接
2.不等连接:连接条件不用等号来连接
3.外连接:(+)(放在查询数据少的一方)
当要查询出外键的值为空的数据时就需要使用外连接。等连接只能查出外键的值不为空的值。
4.子连接:
5.集合操作符:

select avg(salary),sum(salary),max(salary),count(salary)
from s_emp;

group by:分组
注:用于分组,将该分组的字段相同的值的数据分到一组

查询每个部门的平均工资?
select dept_id,avg(salary)
from s_emp
group by dept_id;

查询每个部门的最高工资?
select dept_id,max(salary)
from s_emp
group by dept_id;

select count (*)
from s_emp
group by dept_id;

注:组函数不能出现在where子句里
对组函数进行过滤使用having
对于多个字段进行分组,当多个字段的值都相同的数据才分为一组

组函数:
AVG(),SUM(),COUNT(),MAX(),MIN(),STDDEY(),VARIANCE()

例:查询各个部门各个职称的平均薪水和最大薪水,
select dept_id,avg(salary),max(salary)
from s_emp
group by dept_id,title
having avg(salary)>2000;


sql引擎:解析sql语句
解析顺序:
from,where ,group by ,having,select,order by

语句关键词 解析顺序
select 5
from 1
where 2
group by 3
order by 6
having 4

注:where 分组前条件限制;
having 分组后条件限制;

第八章 数据建模和数据库设计

数据库设计的步骤:
1.需求分析:(实体,属性,实体与属性间的关系)
例:学生选课系统(学生(学号,姓名...)
课程(课程号,课程名...))
2.系统设计:画ER模型图(实体-关系模型图)
3.文档的创建:(方便与客户进行交流)
4.画实例图,建表:
5.测试,产品:


实体:
属性:
关系:两个实体间的关系(有时间限定,同时性)
1)一对一:外键放在任何一方,如果出现must be关系,就放在must be这方;
2)一对多:放在多的这方;
3)多对多:建立一张桥表,变成两个一对多的关系;

学生:
课程:
选课表:(学号,课程号)

联合主键:多个字段共同来唯一标识一条数据
class_id id name
主键:一个字段来唯一标识一条数



第九章
数据类型:
1.字符类型:char:长度不可变的固定字符
varchar:长度可变的字符
varchar2:长度可变的字符,是oracle特有的
例:char(10)varchar(20)varchar2(10)
hello:
用char(10) hello-----
用varchar hello

注:什么时候用char,什么时候用varchar?
长度固定时用char(电话号码,身份证)
长度不固定,可变时用varchar;

2.数字类型:number
number(5,2)//2代表两个有效的小数位,5代表有效的长度;
3位有效的整数位
999.99

3日期类型:date
clob:存放字符串(长度2G)
blob:

创建表student
create table student(
id number(7) constraint
student_id_pk primary key,
name varchar2(10) constraint student_name_nn not null,
age number(7) default 0,
phone char(11) constraint student_phone_uk unique,
gender char(5) constraint student_gender_ck
check(gender in('f','m')),
address varchar2(100)
);

自定义约束名:constraint 约束名
约束名:表名_字段名_约束名
//constraint 修改约束的名字,系统会有默认的约束名

//查询student表中的约束名
select constraint_name
from user_constraints
where table_name='STUDENT';

约束类型:
列级约束;
表级约束;
注:对于非空约束只能使用列级约束
联合主键,联合唯一键,联合外键必须使用表级约束,其他的约束可以任意选

1)主键primary key
a.列级约束
字段名 数据类型 取约束名 约束类型
id number(7) constraint s_is_pk primark key;

b.表级约束
id number(7),//(先定义)
constraint s_id_pk primary key(id),

c.联合主键
id number(7),
id1 number(7),
constraint s_id_pk primary key(id,id1),

2)唯一键:unique
a.列级约束
字段名 数据类型 取约束名 约束类型
id number(7) constraint s_is_uk unique;
phone char()
b.表级约束
id number(7),//(先定义)
constraint s_id_uk unique(id),

c.联合唯一键
id number(7),
id1 number(7),
constraint s_id_uk unique(id,id1),

3)选择性约束:check
a.列级约束
gender char(5) constraint s_gender_ck check(gender in('f','m')),
b.表级约束
gender char(5), constraint s_gender_ck check(gender in('f','m')),

4)非空约束:not null
列级约束:
name varchar2(20) constraint s_name_nn not null,
5)外键约束:foreign key
a.列级约束
字段名 数据类型 取约束名 references 表名(字段名),//references 依赖于
s_id_number(7) constrint t_s_id_fk
references student(id),

b.表级约束
s_id_number(7),
constraint t_s_id_fk forign key(s_id)
references student(id),

c.联合外键:当依赖
student pk(id,id1)
s_id1 number(7),
s_id2 number(7),
constraint t_s_id_fk forign key(s_id,s_id1)
references student(id,i

d1),

注:当需要的外键是另一张表的联合主键时,用联合外键;

create table employee(
id number(5) constraint employee_id_pk primary key,
lastname varchar2(20) constraint employee_lastname_nn not null,
firstname varchar2(20)
);

create table t_order(
id number(5) constraint t_id_pk primary key,
date_ordered date constraint t_date_ordered_nn not null,
date_shipped date,
e_id number(7) constraint t_e_id_fk references employee(id)
);

create table item(
id number(7),
price number(7,2),
quantity varchar2(100),
order_id number(7) constraint item_order_id_fk references t_order(id) constraint item_order_id_nn_not null,
constraint item_order_id_pk2 primary key(id,order_id)
);

select constraint_name
from user_constraints
where table_name='EMPLOYEE';


第十一章

1. insert:插入
例:向mumber表中插入数据
insert into member
values(1,'tom','zhangsan','上海黄浦江','shanghai','12345678900',sysdate);

注:在插入数据时不要违反五大约束和列级约束;
id,last_name,join_date
insert into member(id,last_name,join_date)
values(2,'scf',sysdate);

2. update:修改(修改为set后面的数据)
例:把phone修改为1234
update member set phone='1234';
例:把phone修改为1234,城市修改为昆山(修改多个数据用,隔开)
update member set city='昆山',phone='1234';
例:把ID=1的数据的phone修改为888888(限定性修改)
update member set phone='888888'
where id=1;

3. delete:删除
a.删除表中的所有数据
delete from member;
rollback 回滚(回退)---->只对DML语句进行回滚
b.删除表中的某一项数据(限定性删除)
delete from member
where id=1;

会员注册

try{

//事务开始
更新用户表
更新等级表
更新积分表
....
....
commit//提交事务
}catch(Exception e){
rollback;
}

事务的开始:
1)开启sql*plus工具;
2)前一个事务的结束代表另一个事务的开始;

事务的结束:
1)执行commit,rollback;
2)当我们执行DCL,DDL语句时,事务就自动提交;
3)系统发出错误,系统关闭都会提交;

注:DML语句时不会自动提交的,需要我们手动的提交事务;
insert,delete,update;

insert into member(id,last_name,join_date)
values(4,'lucy',sysdate);

事务的特性:
1.原子性:事务不可再分,同成功,同失败
2.一致性:操作前后总和不会改变
3.隔离性:看不见内部的操作
4.持久性:数据保存在磁盘上


插入
insert into member
savepoint a;
update member
savepoint b;
delete form member
insert into member

rollback;
rollback to a;
rollback to b;

第十二章 字段

1.增加字段
alter table tableName
add(colum datatype [default d] [not null]);


例:给student增加一个class_id字段
alter table student
add (class_id number(7));
注:在增加字段的时候,只能为该字段增加非空约束,不能加其他的约束;

2.删除字段
alter table tableName drop column columnName
删除student中的class_id
alter table student drop column class_id;

3.修改字段()
alter table tableName
modify (column datatype [default d] [not null]);
注:1)修改后的数据类型,数据类型长度;非空约束是否满足之前存放在表中 的数据的值
2)修改字段时,如果需要修改约束,只能将其修改成非空约束;
例: 将name字段修改为char(10)
alter table student

modify (name char(10));
4.增加约束:不能增加非空约束
alter table tableaName
add constraint 约束名 type(column);

为address增加一个唯一约束
alter table student
add constraint student_address_uk
unique(address);

查看约束:
select constraint_name
from user_constraints
where table_name='STUDENT';

5.删除约束:
alter table tableName
drop constraint 约束名

alter table student
drop constraint student_address_uk;

6.约束失效:
insert into student(id) values(1);
alter table student
disable constraint student_name_nn;
insert into student(id) values(1);

7使约束生效
alter table student
enable constraint student_name_nn;

8.drop,delete,truncate
drop:删除数据及表结构
drop table tableName
delete:只删除表中的数据,(安全,以日志文件的形式进行备份)
delete from tableName [where ...]
truncate:只删除表中的数据,效率更高
truncate table tableName

9.重命名 rename
rename oldName to newName;
rename student to stu;

alter table stu rename column name to new_name;


10.增加注释:
为student表增加注释
comment on table stu
is 'this is student information';

查看注释:
select comments
from all_tab_comments
where table_name='STU';
注:注释表系统自有;

user_tables
user_constratints
注:这两张表系统的数据字典表中有!

查看当前用户所有的表:
select object_name
from user_objects
where object_type='TABLE';

select table_name
from user_tables;


select constraint_name
from user_constraint
where table_name='S_EMP';


select constraint_name,column_name
from user_cons_columns
where table_name='S_EMP';


第十三章 序列

1、sequence
sequence是Oracle数据库中一种特殊的对象,能够产生连续的整数值,
可以为数据库中多个对象共同使用,主要用于作为主键值。

2、创建sequence
CREATE SEQUENCE name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
注: a) 各可选项位

置不先后次序
b) 当increment by n为正数时,默认maxvalue为: 1E+27,默认minvalue为: 1
当increment by n为负数时,默认maxvalue为: -1 ,默认minvalue为: -1E+26
ncrement必须为非零整数,加不加NOMAXVALUE效果一样,这本身是默认值
c) CACHE n可以每次预产生15个,20个,放到内存里,提高性能。不写默认CACHE 20个
d) cycle用于循环,到了最大数后循环(不建议使用)

注:start with 开始值:1
increment by 步长: 2
ex: 1 3 5 7
minvalue:最小值
nominvalue:没有最小值
maxvalue:最大值
nomaxvalue:没用最大值
cycle:循环
nocycle:没有循环
cache:缓存
nocache:没有缓存

例:创建序列:
create sequence stu_id
start with 1
increment by 1
maxvalue 100;

查看当前用户所有的序列
select sequence_name
from user_sequences;

3、修改sequence
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
注: sequence不能修改起始值

4、使用sequence
通过伪列nextval和currval进行调用
1) nextval: 每次获得不同的sequence值
2) currval: 获得当前指向的sequence值
注: 在sequence对象没有通过nextval调用之前,不能通过currval调用,
否则会产生错误。

使用序列:
1.nextval:获取序列的下一个值
2.currval:获取序列当前的值

先查看下一个值,再查看当前的值
(用nextval来激活序列,再用currval来查看当前的值)
select stu_id.nextval
from dual;
select stu_id.currval
from dual;

5.删除序列:
drop sepqence sepuenceName


第十三章 创建序列

1.创建序列
start with 开始值:1
increment by 步长: 2
ex: 1 3 5 7
maxvalue:最大值
nomaxvalue:没用最大值

例:创建序列:
create sequence stu_id
start with 1
increment by 1
maxvalue 100;

查看当前用户所有的序列
select sequence_name
from user_sequences;

3.使用序列:
1.nextval:获取序列的下一个值
2.currval:获取序列当前的值

先查看下一个值,再查看当前的值
(用nextval来激活序列,再用currval来查看当前的值)

select stu_id.currval
from dual;
select stu_id.nextval
from dual;

5.删除序列:
drop sepqence sepuenceName


第十四章 视图

1、视图
视图是一个或多个表的部分数据,它可以像表一样进行CRUD
(Create、Retrieve、Update、Delete)操作,但没有具体的
存储数据结构,它以一个select语句的形式存在数据库中。

本质: 一条有名字的select语句
表现: 一到多张表的部分内容

2、创建视图
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]

例:创建视图:
create view t_view
as
select *
from s_emp
where dept_id=32;

注:创建好之后和表的使用是一样的,可以进行增删改查等操作;
但会影响到原表;

注: a) or replace: 如有相同名字的视图对象,替换。
b) force: 如subquery中源表不存在,先创建视图对像,
这时视图对象虽创建,但不能正常使用默认值为noforce,
即源表不存在,不能正常创建视图。
c) with check option:表示可以进行插入、更新和
删除操作,但应该满足WHERE子句的条件。
d) 视图的查询可以使用复杂的SELECT语法,
包括连接/分组查询和子查询
e) 在没有WITH CHECK OPTION和WITH READ ONLY的情况下,
查询中不能使用ORDER BY子句
f) 如果没有为WITH CHECK OPTION约束命名,
系统会自动为之命名,形式为SYS_Cn
例: 创建一视图:
create or replace view a
as
select id from s_emp
where id<9;
g) with read only:只允许进行select操作。
注: 当对建立视图的那张真正的表进行修改(插入、更新和删除)后,
通过视图查看到的数据是修改以后的数据。

resource:角色 该角色包括create sepuence的权限

创建视图需要create view权限:
1)需要切换到用户dba上去执行
grant create view to briup
2)切换到briup用户上去创建视图
update t_view set last_name='zhangsan';

例:创建视图
create view t_view
as
select *
from s_emp
where dept_id=32;

create or replace view t_view
as
select *
from s_emp
where dept_id=32
WITH READ ONLY;//(有这一句不能进行增删改查等操作)

create or replace view t_view
as
select *
from s_emp
where dept_id=32; //可以进行增删改查等操作

在视图中插入数据:
insert into t_view(id,last_name,dept_id)
values(999,'tom',32);

3、视图的分类
1) 简单视图
数据来源于一个表,
不包含函数以及进行分组,
可以进行DML操作;
2) 复杂视图
数据来源于多个表,
包含函数以及进行分组,
不可以进行DML操作;

4、修改视图
创建视图的时候显式的加上or replace关键字

5、删除视图
drop view view_name;


第十五章 索引

1、索引
索引是Oracle中一种的对象,数据库用其以加快检索速度,
几乎所有的关系型数据库中都采用b*tree类型索引,
也是被最多使用的。其树结构与二叉树比较类似,
根据rowid快速定位所访问的记录。

2、创建索引
1) 自动创建索引在创建主键约束、唯一键约束
以及

使主键约束、唯一键约束生效时会自动创建唯一索引。
2) 手动创建索引用户可以在列上创建非唯一性的索引
CREATE INDEX index
ON table (column[, column]...);

create index student_index
on student(name);
3、使用索引的场合
1) 列频繁用于where子句或连接条件中
2) 列的取值范围较广
3) 表很大,记录数量较多
4) 查询返回的结果占总记录数的百分比在2~4%内

4、删除索引
DROP INDEX index_name



第十六章 用户

1、创建用户
CREATE USER scott IDENTIFIED BY tiger;

2、修改用户的密码
1)ALTER USER scott IDENTIFIED BY lion
2)password
3、DBA赋予用户权限
GRANT create table, create sequence,create view
TO scott;

GRANT resource,connect
TO scott;

三种标准的角色:
1) connect: 提供了登录和执行基本函数的能力。
可以连接数据库以及在这些表中进对数据进行查询,
插入,修改及删除的权限。
2) resource: 建立对象的能力。
3) dba: 拥有所有的系统权限,包括无限的空间限额,
以及给其他用户授予全部权限的能力。

4、开放权限给其它的用户
GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

PUBLIC: 将权限赋予给所有的用户
WITH GRANT OPTION: 权限的受予者也可以将权限赋予其它的用户。
没有这个选项,接受权限的用户就不能将接受到的权限再赋予其它的用户。
这个选项不能赋予PUBLIC。

5、回收权限
REVOKE select, insert
ON s_dept
FROM scott
[WITH GRANT OPTION];

WITH GRANT OPTION: 回收赋予给其它用户的权限

6、创建和删除同义词
为对象定义另一个名字,可以通过这个名字访问该对象
create [public] synonym synonym_name for table_name
drop synonym synonym_name

public: 创建和删除同义词只能由DBA执行
同义词拥有如下好处:节省大量的数据库空间,
对不同用户的操作同一张表没有多少差别;
扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;
同义词可以创建在不同一个数据库服务器上,通过网络实现连接。

select * from synonym_name

系统的权限:
create session
create table //由resource授权
create sequence //由resource授权
create view
create procedure

create user mybriup identified by mybriup;//创建用户
grant resource,connect to mybriup;//给用户授权
conn mybriup/mybriup;//切换用户
connect权限

//在briup用户下,给mybriup用户的s_emp授予select的权利
conn briup/briup;
grant select
on s_emp
to mybriup;

//在mybriup用户下,查询briup用户授予s_emp的select的权利
conn mybriup/mybriup;
select *
from briup.s_emp;


相关主题
文本预览
相关文档 最新文档