Oracle进阶篇

常见数据库对象

表:基本数据存储集合,由行和列组成视图:从表中抽出的逻辑上相关的数据集合序列:提供有规律的数值索引:可以提高查询的效率同义词:给对象起别名

数据类型有哪些?

varchar2 可变字符长度char 不可变字符长度number 数值类型date 日期类型long 可变长字符数据,最大2Gblob 字符数据,最大4Graw 原始二进制数据bfile 存储外部二进制文件 最大4Growid 行地址

事务回滚

callback; 回滚

commit; 提交,当进行提交的时候就不能再进行回滚

约束(constraint)

简单的约束操作

not null 不为空约束unique 唯一约束 不可重复primary key 主键约束 唯一 非nullforeign key 外键约束check 检查约束

例子:

create table emp(
id number(10) constraint emp_id_pk primary key,
name varchar2(20) constraint emp_nam_nn not null,
email varchar2(20), salary number(10,2) check(salary > 1500 and salary < 30000),
constraint emp_email_uq unique(email)
)

外键约束:

和mysql一样

例:

create table emp(
user_id number(10) constraint emp_id_pk primary key,
.......
)
create table all_user(
id number(10) constraint emp_id_pk primary key,
.....
constraint all_user_dept_id_fk foreign key(id) references 表名2(列名)
)

使用alter table操作约束

alert table可以添加删除约束,不能修改约束,添加not null约束要使用modify

alter table 表名 drop constraint 约束名; //删除约束

alter table 表名 add constraint 约束名 约束类型(列名); //添加约束

alter table 表名 modify(列名 类型(长度),not null); //特殊情况

alert table 表名 disable constraint 约束名; //将约束无效化

alter table 表名 enable constraint 约束名; //将约束有效化

视图

简单视图

把某个表中的主要字段提取到一个视图中。
创建视图:create view 视图名 as select 字段1,字段2 from 表名 where 条件;
select * from 视图名;               //增删改查视图中的数据和操作表中的数据一样。
注意:对视图的数据操作会影响到表中的数据基于多表
创建视图:
create table 视图名 as select 字段1,字段2,字段3 from 表1,表2 where 条件 with read only; //with read only 表示此视图只读修改视图create or replace view 视图名()重新创建同名会覆盖之前的视图。

复杂视图

表的数量最少一个,有函数,有分组,DML操作有时可以
例:create or replace view empviewas select name,avg(salary) salary from emp e,desc dewhere e.id = de.id group by name;

注意:在复杂视图中不能使用DML 增删改操作

序列(SEQUENCE)

提供有律的数值,主要用于提供主键值,给主键自增

CREATE SEQUENCE 系列名
[INCREMENT BY n] --每次增长的数值
[START WITH n] --从哪个值开始
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMIXVALUE}]
[{CYCIE | NOCYCIE}] --是否需要循环
[{CACHE n | NOCACHE}]; --是否需要缓存登录

例子:
create sequence 序列名
increment by 1 --每次增长10
start with 0 --从0开始
maxvalue 10000 --增长到10000
cycle --需要循环
nocache --不需要缓存

序列创建好了,怎么使用呢?
select 序列名.nextval from dual; //调用序列有两个方法 currval和nextval//currval是序列的当前值 nextval是下一个值 dual是伪表

主要操作:insert into 表名 values(序列名.nextval,'','');

修改序列:alter sequence 序列名 increment by 1,nocycle....;

索引(index)

提高响应效率,通过指针加速oracle服务器的查询速度,索引只会影响到查询速度。索引一旦建立,oracle会自动维护和管理,由oracle决定什么时候来用索引,删除一个表时索引会自动删除。通过快速定位数据的方法,减少磁盘I/O

自动创建:在定义primary key和unique会自动创建索引

手动创建:create index 索引名 on 表名(字段名);

什么时候用索引:

列中数据值分布范围广泛列经常在WHERE字句或连接条件中出现表经常被访问而且数据量很大,访问的数据大概占数据总量的2%-4%

同义词(SYNONYM)

create synonym 别名 for 表名;

select * from 别名;

控制用户权限

简单的创建一个用户:CREATE USER 用户名 IDENTIFIED BY 密码;

添加用户登录权限,一般有一下权限:CREATE SESSION (创建会话:登录权限)CREATE TABLE (创建表)CREATE SEQUENCE (创建序列)CREATE VIEW (创建视图)CREATE PROCEDUE (创建过程)

添加权限操作:grant create session to 用户名; //grant:授予 给创建表权限外还要分配表空间:alter user 用户名 quota unlimited on 表空间; grant create table to 用户名;

创建角色并赋予对象:

1.创建角色:create role 角色名;

2.为角色赋予权限:grant create table,create view to 角色名;

3.将角色赋予用户:grant 角色名 to 用户名1,用户名2;

收回对象权限(revoke):

revoke select on 表名 from 用户名; //收回此用户对其他表的操作

SET运算符

并集union/union all   表A union/union all 表B,去除A和B所有的元素交集
intersect 表A intersect 表B,取A和B共同的元素差集
minus 表A minus 表B,把A元素中存在B元素的值省去。

例子:SELECT employee_id,job_id FROM employeesUNIONSELECT employee_id,job_id FROM job_history

猜你喜欢

转载自blog.csdn.net/qq_39130032/article/details/81239125