1. Alter Table
alter table : add | modify | drop
add:
alter table dep80 add ( job_id varchar2(7) ) ( 必须在最后添加列 )
modify:
alter table dep80 modify ( job_id varchar2(30) )
可以改变 data type, size, default value
增加没有限制
缩小或者是改变某列的数据类型,则必须该列的值全为null.
CHAR-> VARCHAR2 直接就可以,但是反过来 varchar2 –> char 就必须要该列为 null.
改变 defalut value只对后续的操作起作用。
drop:
alter table dep80 drop ( job_id ) 或者 drop column job_id
一次只能删除一列
unused:
alter table dep80 set unused( job_id ) 设置不可用,操作比drop快,等到系统不忙时,在使用drop删除.
USER_UNUSED_COL_TABS 可以查看到设置了 unused 的列。
alter table dep80 drop unused columns ( 将该表的全部 unused 列删除 )
2. Drop Table
drop table dep80 ( 所有跟 dep80有关的内容, 全部一起被删除,例如索引,约束等等,只有 views, synonyms 还可以继续 )
3. Rename Table
rename dep80 to dep90 ( 必须有足够的权限 )
4. Truncate table
truncate table dep80
将所有行删除,并释放空间,注意此命令属于DDL操作,不会生成 rollback information. 并且也不会触发trigger, 删除操作特别快。
5. Adding Comment
comment on table | column ( employees.job_id ) IS ‘ Employee Information ’
ALL_COL_COMMENTS, USER_COL_COMMENTS, ALL_TAB_COMMENTS, USER_TAB_COMMENTS 这些数据字典中可以查到注释的情况.
6. Constraint
not null, unique, primary key, foreign key , check 约束种类
例如 :
1: CREATE TABLE employees (
2: employee_id NUMBER(6),
3: job_id VARCHAR2(10) NOT NULL, -- 行级约束, 系统命名,也可以自己命名,
4: -- 例如 job_id varchar2(10) CONSTRAINT emp_job_id_c NOT NULL ,
5: constraint emp_id_pk primary key ( employee_id ) -- table 级
6: )
check约束 : salary NUMBER(2) constraint emp_salary_min CHECK ( salary > 0 )
注意 : 基本形式为 CONSTRAINT name 约束名(例如 primary key , check)相关内容
创建完 TABLE 以后:
you can add, drop, enable, disable 约束,但是不能修改它.
增加 not null 约束时,必须是空的表或者是添加的列的每一行都有值。
foreign key:
oracle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在,即在子表中定义foreign约束,参考主表, constraint foreign key ( 子表 id ) references 主表( id ), 所以当子表记录发生变化时,没关系,不影响主表,但是如果是主表发生变化,那就有以下3种可能
1)no action,
不能删除主表该内容,会提示有 foreign key 连接,所以无法删除。
2) cascade, REFERENCES employees(employee_id) on delete cascade ;
会将子表的相应关联内容一同删除。
3) set null, REFERENCES employees(employee_id) on delete set null;
主表删除完成,会将子表相应参考内容设置成 null.
ALTER TABLE manager ADD CONSTRAINT emp_manager_fk FOREIGN KEY( manager_id ) REFERENCES employees( employee_id )
ALTER TABLE manager DROP CONSTRAINT emp_manager_fk
ALTER TABLE manager DISABLE | ENABLE CONSTRAINT emp_manager_fk
数据字典中查询约束信息:USER_CONSTRAINTS( table级别 ), USER_CONS_COLUMNS( column级别 )
7. VIEW
1: CREATE [ OR REPLACE] [ FORCE | NOFORCE ] VIEW view_name [(别名1, 别名2...)]
2: AS Subquery
3: [ WITH CHECK OPTION [CONSTRAINT constraint_name] ]
4: [WITH READ ONLY [CONSTRAINT constraint_name]]
其中:FORCE是指不管base table是否存在都创建view,默认是NOFORCE
别名的顺序必须和Subquery一致,个数相同。
数据字典中: USER_VIEWS
DROP VIEW view_name
8. SEQUENCE
sequence 是独立存储的,独立于任何 table 之外。
1: CREATE SEQUENCE sequence_name
2: [ INCREMENT BY n ] -- 增长的间隔
3: [ START WITH n ] -- 开始,默认是1
4: [ MAXVALUE n | NOMAXVALUE ]
5: [ MINVALUE n | NOMINVALUE ]
6: [ CYCLE | NOCYCLE ] -- 达到MAX或MIN时循环, 默认是不循环
7: [ CACHE n | NOCACHE ] -- specifies how many values the Oracle Server preallocates and keep in memory
-- 默认是 20
在数据字典中 : USER_OBJECT, USER_SEQUENCE
NEXVAL : 下一个可以使用的值
CURRVAL : 目前正在使用的最后一个值
ALTER SEQUENCE sequence_name ( 仿照 create sequence,但是不能修改 start with)
DROP SEQUENCE sequence_name
9. INDEX
CREATE INDEX index_name ON TABLE( column, column … )
应该创建索引的情况 : 某列有很多 null, 经常被用作连接的列,table很大,并且总是指查询 2%~4%数据
不应该创建索引的情况:很小的table, 不经常用做条件的列,这个table总是update
数据字典 : USER_INDEXES, USER_IND_COLUMNS
在函数上创建索引 : CREATE INDEX index_name ON department(UPPER(department_name))
不能修改索引,直接删除再重建。
DROP INDEX index_name
10. SYNONYM
CREATE [PUBLIC] SYNONYM synonym_name FOR object
CREATE PUBLIC SYSNONYM dept FOR alice.departments.
DROP PUBLIC SYNONYM dept ;
这个 SYNONYM 是本地创建的别的用户下边的 table, 但是,我们系统中确实在ADM这个用户下创建的SYNONYM,而在HANARO这个用户下可以直接使用。。。解答,系统创建命令为 CREATE SYNONYM HANARO.dept FOR dept, 注意此处小数点前边的HANARO,表示用户属于的用户,即,如果省略这个内容,表示在当前用户下创建的同义词,而加上这个以后,表示在该用户下创建的同义词,并且同义词的名字就是小数点后边的名字。
Oracle 同义词分为 private, public 其中 private 仅创建的用于可以使用,public则所有用户都可以使用.
CREATE SYNONYM DEPT FOR scott.dept; 表示将 scott用户下的表 dept,创建为当前用户的同义词,默认为 private.