1.创建表
CREATE TABLE table_name ( column1 datatype,
column2 datatype,
....);
VARCHAR2(N) 可变长度字符串,最大长度可达4000KB.
CHAR(N) 固定长度字符串,最大长度可达2000KB.
NUMBER 浮点类型的数据
NUMBER(M,N) 可表示整数和小数,m和n分别表示精度和小数位数
DATE 日期型数据
LONG 可变长的字符串,最大长度可达2GKB
2.快速创建表
CREATE TABLE table1 as select column1, column2...... from table2;
如果新表的列名要自己取的话则:
CREATE TABLE column_new1, column_new2 as select column1, column2...... from table2;
3.增加列
ALTER TABLE table_name ADD (column1 datatype,
column2 datatype,
......);
4.修改列
ALTER TABLE table_name MODIFY (column1 new_datatype NULL (NOT NULL),
column2 new_datatype NULL (NOT NULL),
......);
5.重命名表
ALTER TABLE table_name RENAME TO table_name_new;
6.约束
约束可以是列级约束,也可以是表级约束,但是NOT NULL 只能是列级约束
创建约束
eg: CREATE TABLE student (
sno number(8),
sname char(8) constraint nn_sname NOT NULL,
gender char(2),
CONSTRAINT pk_sno PRIMARY KEY(sno),
CONSTRAINT gen_check CHECK ( gender in ('男‘,’女‘))
);
外键约束定义形式比较复杂:
列级约束,放到 emp表deptno 列后 :CONSTRAINT fk_deptno REFERENCES dep(deptno)
表级别约束:CONSTRAINT fk_deptno FOREIGN KEY (depto) REFERENCES dep(deptno)
还可以在创建表之后创建约束
ALTER TABLE emp ADD (CONSTRAINT k_deptno FOREIGN KEY (depto) REFERENCES dep(deptno));
但是NOT NULL 只能通过Modiy来完成
ALTER TABLE student MODIFY (sname CONSTRAINT nn_sname NOT NULL);
查看约束(与约束有关的两个数据字典:user_constraints, user_cons_columns
eg. SELECT ucc.constraint_name, ucc.table_name, ucc.column_name, uc.search_condition,uc.status
FROM user_cons_columns ucc,user_constraints uc
WHERE ucc.constraint_name = uc.constraint_name
AND ucc.column_name ='CALL_TYPE_LEVEL3'
AND ucc.table_name='CALL_TYPE_LEVEL3';
删除约束:
ALTER TABLE student DROP CONSTRAINT nn_sname;
如果要删除主键约束,首先要考虑这个主键是否已经被另一个表的外键关联,如果没有关联,那么主键约束可以直接删除,否则不能直接删除。要删除主键约束,必须使用CASCADE关键字,连同与之关联的外键约束一起删除。
eg: ALTER TABEL dept DROP CONSTRAINT pk_dept CASCADE;
使一个约束无效:
ALTER TABLE student DISABLE CONSTRAINT nn_sname;
ALTER TABLE student ENABLE CONSTRAINT nn_sname;
7.index
CREATE INDEX index_name on Table_name ( column1, column2....);
创建唯一索引:
CREATE UNIQUE INDEX index on emp(ename, deptno);
与索引有关的两个数据字典:user_indexes 和user_ind_columns
查询索引基于的表和列:
SELECT index_type,table_name, uniqueness,status FROM user_indexes;
select table_name,column_name from user_ind_columns where index_name='INX_1';
8.view
create or replace view as select ename, sal from emp where deptno=30 and sal > 2000;
9.序列 sequence
语法格式 CREATE SEQUENCE 序列码 INCREMENT BY n
START WITH n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
CACHE n | NOCACHE
eg : CREATE SEQUENCE seq2
START WITH 10
INCREMENT BY 2
MAXVALUE 10000
NOCACHE;
序列的信息可以从数据字典user_sequences中获得。
eg: SELECT min_value,max_value,increment_by,last_number,cycle_flag FROM user_sequences
WHERE sequence_name = 'SEQ2';
序列的使用: SELECT seq2.nextval from dual;
10.同义词 (synonym)
同义词本身不包含原有对象的数据或代码,它的作用只相当于指针。
ORACLE支持两种类型的同义词:私有同义词和公共同义词。
公共同义词一般有DBA创建,可以由所有用户使用。
例如:程序包DBMS_OUTPUT是属于特权用户SYS的,但是任何一个用户都可以直接使用,不用指定它所在的模式。
CREATE SYNONYM 同义词 for 用户名。对象
eg:CREATE SYNONYM sy_dept for scott.dept;
DROP SYNONYM 同义词;
select deptno,deptname from sy_dept;
同义词信息的查询:user_synonyms ,dba_synonyms, all_synonyms
user_synonyms 记录了当前用户的同义词,这个表的个列定义其意义如下:
SYNONYM_NAME
TABLE_OWNER
TABLE_NAME
DB_LINK
我们发现这有 一列db_link,这个主要是为跨数据库用的。
如果要创建远程数据库一张表的同义词,就需要先创建数据库连接来扩展访问然后创建同义词
create or replace synonym user1.table_name for user2.table_name@link
同义词使用的好处
节省数据库表空间,对不同用户的操作同一张表没有多少差别,扩展的数据库使用范围,能够在不同的数据库之间实现无缝交互
那如何创建dblink,请参考我的另外一篇博客: http://blog.csdn.net/huluedeai/article/details/41985029
同义词和dblink的联系:如果要创建远程数据库一张表的同义词,就需要先创建数据库连接来扩展访问然后创建同义词
访问上有点区别。例如 select * from A@dblink ,select * from A (同义词可以直接访问)
是dblink一般是服务器级别的。 是服务器和服务器之间的关系。
同义词一般是表 ,视图等。
本篇是对 《oracle 11g数据库管理员指南》一书第一章的笔记。