查看当前用户下的表(两种形式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 = 表名;