zoukankan      html  css  js  c++  java
  • 温习 SQL 02

    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.

  • 相关阅读:
    C# MATLAB混编(二)
    C# MATLAB混编(一)
    C#编程.循环的中断
    WPS 常用操作
    PowerDesigner 操作手册
    软件开发-零散问题
    代码优化
    layui 前端UI框架
    css 样式渲染
    linux 操作系统
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2768666.html
Copyright © 2011-2022 走看看