oracle表相关用例和语法

2014-04-12

一.表和列的命名规则

1.必须由字母开始,字符长度为1-30个字符,只能包含a-z,A-Z,0-9,_,$,#

2.同一个用户所拥有的对象之间不能重名,不能用oracle服务器的保留字

3.建议使用描述性的名字为表和其他数据库对象命名

4.表和列名对大小写敏感

二.create table语法

create table tbl_name(col1 datatype,....) tablespace tablespace_name;

1.用户和表创建时都不指定表空间

2.用户指定表空间,表不指定表空间

3.用户和表在创建时都指定表空间

//示例

##创建表指定表空间

SQL> create table t_student(stu_id number,stu_name varchar2(50),primary key(stu_id)) tablespace tbs_01;

SQL> insert into t_student values(1,'yry');

##查看表空间

SQL> select segment_name,tablespace_name from user_segments where segment_name='T_STUDENT';


SEGMENT_NAME  TABLESPACE_NAME

-----------   -------------------------

T_STUDENT      TBS_01

##创建表不指定表空间

SQL> create table t_student1(stu_id number,stu_name varchar2(50),primary key(stu_id));

SQL> insert into t_student1 values(1,'yry');

SQL> select segment_name,tablespace_name from user_segments where segment_name='T_STUDENT1';

三.给表添加注释

1.语法:

comment on table schema.tbl_name is 'string_table_comment'

comment on cloumn schema.tbl_name.cloumn is 'string_cloumn_comment';

2.示例

##创建表

create table emp(no number not null,name varchar(50),constraint pk_emp primary key(no));

##查看表结构

select dbms_metadata.get_ddl('TABLE','EMP') from dual;

##为表和列添加备注

comment on table emp is 'employees';

comment on column emp.no is 'emoployee no';

##定义输出格式

set linesize 400;

col comments for a30;

##查看表注释

select table_name,table_type,comments from user_tab_comments where table_name='EMP';

TABLE_NAME       TABLE_TYPE  COMMENTS

------------------------------ ----------- ------------------------------

EMP       TABLE   employees

##查看列备注

select * from user_col_comments where table_name='EMP';

TABLE_NAME       COLUMN_NAME      COMMENTS

------------------------------ ----------------------------------------

EMP       NO      emoployee no

EMP       NAME

//

select * from tab where tname like '%COMMENT%';

##查看表列限制信息

desc user_col_comments;

desc user_tab_comments;

四.用子查询创建表

1.语法:

create table tbl_name(col1,col2...) as subquery;

create table tbl_name(col_name1,col_name2,...) as select col_name1,... from table_name;

2.示例

##创建空表

create table tmp as select * from all_objects where 1=0;

SQL> create table tbl_01(owner,object_name,subobject_name) as select owner,object_name,subobject_name from all_objects;

SQL> select count(*) from tbl_01;


  COUNT(*)

----------

     71859

五.指定default选项

SQL> create table tbl_02(emp_no number,emp_name varchar(30) default 'shiwei' ,create_date date);

SQL> insert into tbl_02(emp_no,create_date) values(1,sysdate);

SQL> select * from tbl_02;

    EMP_NO EMP_NAME  CREATE_DA

---------- ------------------------------ ---------

1 shiwei  12-APR-14

//删除表

drop table tbl_name;

drop table tbl_name purge; ---从回收站清空

六.rename对象

rename old_name to new_name;

old_name:存在的table,view,sequence,private synonym的名字;

七.截断表

truncate table tbl_name;

truncate table 和 delete table 区别

八.序列sequence

sequnence_name seq_tbl_name;

##创建序列

CREATE SEQUENCE customers_seq

 START WITH     1000

 INCREMENT BY   1

 NOCACHE

 NOCYCLE;

##查询序列

SQL> select sequence_name from  user_sequences;

##查看下一个

select seq_emp.nextval from dual;

##查看当前

select seq_emp.currval from dual;

1.插入数据时使用sequence

SQL> create table tbl_03(id number,name varchar2(50), primary key(id));

SQL> CREATE SEQUENCE seq_tbl_03

 minvalue 1

  2   maxvalue 999999999999999999999

  3   START WITH     1

  4   INCREMENT BY   1

  5   CACHE 20

  6   NOCYCLE;

SQL> insert into tbl_03 values(seq_tbl_03.nextval,'lisn');

SQL> insert into tbl_03 values(seq_tbl_03.nextval,'lij');

SQL>select *  from tbl_03;

九.创建同义词sysnonym

同义词其实在使用一种替换操作,oracle会自动将同义词替换为它所代表的对象名,再对对象进行操作。如果表和同义词同名,oracle优先操作表。

语法:

create or replace [public] for objects_name;

SQL>create sysnonym offices for hr.locations;

SQL>select count(*) from offices;

十.约束constraints

oracle服务器用约束来防止无效数据输入到表中。

约束做的事情:在插入行数据或者从表中删除数据时强制遵循规则。

not null,unique,primary key,foregin key:在列和引用表的一个列之间建立,并强制一个外键关系

check:指定一个必须为真的条件


create table teacher(teacher_id number not null primary key,teacher_name varchar2(50),ages number(3) check (ages<200));


create table stu(stu_id number not null primary key,teacher_id number not null,stu_name varchar2(50),address varchar(50));

##添加外键约束

alter table stu add constraint fk_stu_teacher foregin key(teacher_id) references teacher(teacher_id);

##添加唯一约束

alter table stu add constraint uk_name unique(stu_name);

或者在创建表的最后添加

constraint uk_name unique(stu_name);

系统约束表:

desc user_constraints;

##查看约束

SQL> select owner,constraint_name,constraint_type,table_name,status from user_constraints;

十一.用户管理

##创建角色

SQL>create role dba_group1;

##赋予角色权限

SQL>grant create session,create table,create view to dba_group1;

##创建用户

SQL>create user test1 idetified by test default tablespace users;

##授与用户权限

SQL> grant dba_group1 to test1;

SQL> conn test1/test1;

SQL> create table t1(id number);

1.角色视图

select * from role_sys_privs;

select * from user_role_privs;

2.revoke回收权限

语法:revoke role|system_privileges from user|role;

SQL> conn scott/tiger;

SQL> revoke dba_group1 from test1;

SQL> conn test1/test1;

ERROR:

ORA-01045: user TEST1 lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.


你可能感兴趣的:(oracle表相关用例和语法)