Oracle的表,序列,视图,索引

来源:互联网 发布:面向连接的网络协议 编辑:程序博客网 时间:2024/06/05 12:43

查看当前用户下的表(两种形式user_tables,user_objects两张表都可以查询) :

select table_name from user_tables;

select distinct object_name from user_objects where object_type = 'TABLE';

查看用户数据库中有哪些对象(这里表示当前用户下存在索引,序列,表,视图):

select distinct object_type from user_objects;

OBJECT_TYPE
------------
SEQUENCE
INDEX
TABLE
VIEW

查看表的结构:

desc 表名;

建表语句:

简单的建表语句(建立一张s_grader表):

drop table s_grade;

create table s_grade(

id number(7),
name varchar2(10),
minsal number(7),
maxsal number(7)

);

建表的同时添加表的约束,并给约束取名,通常取名规则为:表名_列_约束缩写

(当对表操作时,如插入操作,某一列不符合要求,则会显示具体名字的约束错误):

drop table test;
create table test(
id number(7) constraint test_id_pk primary key,
name varchar2(10) constraint test_name_nn not null,
gender varchar2(10) constraint test_gender_ck check(gender in('male','female')),
phone char(11) constraint test_phone_uk unique
);

创建一张复杂的表:

create table s_emp2(
id number(7) constraint s_emp2_id_pk primary key,
last_name varchar2(25) constraint s_emp2_last_name_nn not null,
frist_name varchar2(25),
user_id varchar2(8) constraint s_emp2_user_id_nn not null
constraint s_emp2_user_id_uk unique,
start_date DATE default sysdate,
comments varchar2(255),
manager_id number(7),
title varchar2(25),
dept_id number(7) constraint s_emp2_dept_id_fk references s_dept(id),
salary number(11,2),
commission_pct number(4,2) constraint s_emp2_commission_pct_ck check(commission_pctin(10,12.5,15,17.5,20))
);

修改表名:
rename 原表名 to 新表名;


修改列名:
alter table 表名 rename column 列名 to 新列名;


删除表中所有的数据,DDL操作(直接提交)
truncate table 表名; 相当于 delete from 表名; commit;

删除某张表:

drop table 表名;(如果这张表被另一张引用(如外键),则删除失败)

drop table s_dept cascade constraint;(会同时删除约束关系)


更改表的样式
alter table test2
add age number(7) default 18 constraint test2_age_nn not null;
alter table test2
drop column name;
alter table test2 
modify id constraint test2_id_nn not null;
alter table test2
add  constraint test2_id_uk unique(id);
alter table test2
drop constraint test2_id_nn;

序列的简单使用:

创建一张emp_41的表(根据在emp中查询部门id为41的成员信息)

create table emp_41
as
select id,last_name
from s_emp
where dept_id = 41;


创建序列,供主键使用
create sequence emp_42_id
increment by 1
start with 2
maxvalue 10;


查询序列的信息(在user_sequences表中查询)
select sequence_name,min_value,max_value,increment_by
last_number from user_sequences;


查询序列emp_42_id的下一个值(此处dual是一张空表,仅供查询使用)

select emp_42_id.nextval from dual;


序列的使用:

insert into emp_42 values(emp_42_id.nextval,'tom',42,100);


修改序列:
alter sequence emp_42_id
increment by 2
maxvalue 12;


删除序列
drop sequence emp_42_id;

视图的简单使用:

视图的创建
 grant create view to oracle;//给oracle用户授权
 create view view1
 as 
 select id,last_name,salary
 from s_emp
 where dept_id = 41;

没有则创建,有则取代

create or replace view view1(id,name,sal)
 as 
 select id,last_name,salary
 from s_emp
 where dept_id =41;

 修改视图,同时基表的数据也被改变
 update view1 set name='tmo' where id =2;

创建一张只读视图,保证该视图不会被修改:

确保DML语句不会出现在只读视图(update,delete,insert)
 create or replace view dept_sal(name,min,max,avg)
 as 
 select d.name,min(e.salary),max(salary),avg(salary)
 from s_emp e,s_dept d
 where e.dept_id = d.id
 group by d.name
 with read only;

注意:没有表不能创建视图
 create view view2
 as
 select * 
 from test10;

可以强制创建,但是没有基表也不能使用
 create force view view2
 as
 select * 
 from test10;

在数据字典中查询视图(用户下的所有视图)
 select view_name,text
 from user_views;

索引的简单使用
 create index s_dept_name_idx
 on s_dept(name);

在数据字典查询S_DEPT表的索引
 desc user_indexes;
 select index_name
 from user_indexes
 where table_name = 'S_DEPT';


索引的结构:
desc user_ind_columns;


查询S_DEPT表的索引的名字和对应的列名
 select index_name,column_name

from user_ind_columns
where table_name = 'S_DEPT';


查询某张表的约束和列名(从user_constraints表查询):

select constraint_name from user_constraints where table_name = 表名;



0 0
原创粉丝点击