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.