代码改变世界

创建和管理表【weber出品必属精品】

2014-08-20 22:10  yaoweber  阅读(178)  评论(0编辑  收藏  举报
  1.  创建表

    必须有 :

    1. CREATE TABLE 的权限

    SQL> conn /as sysdba
    已连接。
    SQL> create user test default tablespace users identified by a;
    
    用户已创建。
    
    SQL> conn test/a
    ERROR:
    ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied
    
    
    警告: 您不再连接到 ORACLE。
    SQL> conn /as sysdba
    已连接。
    SQL> grant create session to test;
    
    授权成功。
    
    SQL> conn test/a
    已连接。
    
    SQL> create table t(id number,name varchar2(10));
    create table t(id number,name varchar2(10))
    *1 行出现错误:
    ORA-01031: 权限不足
    
    SQL> conn /as sysdba
    已连接。
    SQL> grant create table to test;
    
    授权成功。
    
    SQL> conn test/a
    已连接。
    SQL> create table t(id number,name varchar2(10));
    create table t(id number,name varchar2(10))
    *1 行出现错误:
    ORA-01950: 对表空间 'USERS' 无权限
  2.  拥有存储空间
    SQL> conn /as sysdba
    已连接。
    SQL> alter user test quota 10M on users;
    
    用户已更改。
    
    SQL> conn test/a
    已连接。
    SQL> create table t(id number,name varchar2(10));
    
    表已创建。
    
    
    创建一个表D
    
    create table d(
        deptno number(2),
        dname  varchar2(10),
        loc    varchar2(10)
        )
        ;
    
    表已创建。
    
    SQL> describe d;
     名称                                    是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     DEPTNO                                             NUMBER(2)
     DNAME                                              VARCHAR2(10)
     LOC                                                VARCHAR2(10)
    
    SQL> desc d;
     名称                                    是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     DEPTNO                                             NUMBER(2)
     DNAME                                              VARCHAR2(10)
     LOC                                                VARCHAR2(10)
  3.  引用其他用户的表

    模式(schema):是一个用户下一组对象的集合,模式名与用户名是一致的

    SQL> conn hr/hr
    
    SQL> grant select on employees to scott;
    
    conn scott/tiger
    
    SQL> select count(*) from hr.employees;
    
      COUNT(*)
    ----------
           107
    
    SQL> show user
    USER 为 "SCOTT"
    SQL> alter session set current_schema=hr;
    
    会话已更改。
    
    SQL> select count(*) from employees;
    
      COUNT(*)
    ----------
           107
    
    SQL> show user
    USER 为 "SCOTT"
  4.  DEFAULT选项
    1. 在插入期间可以指定默认值
    SQL> create table e(empno number(4),ename varchar2(10),hiredate date default sysdate);
    
    表已创建。
    
    SQL> desc e
     名称                                    是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     EMPNO                                              NUMBER(4)
     ENAME                                              VARCHAR2(10)
     HIREDATE                                           DATE
    
    SQL> insert into e values(7788,'SCOTT',default);
    
    已创建 1 行。
    
    SQL> commit;
    
    提交完成。
    
    SQL> select * from e;
    
    EMPNO ENAME  HIREDATE
    ----- ------ --------------
     7788 SCOTT  20-8月 -14
  5.  文字值,表达式,或者SQL函数是合法值
  6.  其他列的名或者伪列是非法的
  7. 伪列:不是真正的列,比如:Excel表格的行id。
    SQL> select rownum,ename,sal from emp;
    
        ROWNUM ENAME    SAL
    ---------- ------ -----
             1 SMITH    800
             2 ALLEN   1600
             3 WARD    1250
             4 JONES   2975
             5 MARTIN  1250
             6 BLAKE   2850
             7 CLARK   2450
             8 SCOTT   4000
             9 KING    5000
            10 TURNER  1500
            11 ADAMS   1100
            12 JAMES    950
            13 FORD    3000
            14 MILLER  1300
  8.  默认的数据类型必须匹配列的数据类型
  9.  Oracle数据库中的表
  10.  用户表

    由用户创建和维护的一系列表的集合
    包含用户的信息

    数据字典
    由Oracle 服务器创建和维护的一系列表的集合
    包含数据库的信息

  11.  数据类型

    表示字符的数据类型:CHAR(n),VARCHA2(n),LANG,CLOB

    表示数字的数据类型:NUMBER(p,s):p为精度,s为刻度

    表示二进制的数据类型:RAW或者LONG RAW、BLOB、BFILE

    表示日期的数据类型:DATE、TIMESTAMP、间隔:年到月、天到秒

    SQL> create table t(da1 date,da2 timestamp)'
      2  
    SQL> 
    SQL> 
    SQL> create table t(da1 date,da2 timestamp);
    
    表已创建。
    
    SQL> insert into t values(sysdate,sysdate);
    
    已创建 1 行。
    
    SQL> commit;
    
    提交完成。
    
    SQL> col da2 for a45
    
    SQL> select * from t;
    
    DA1            DA2
    -------------- ---------------------------------------------
    20-8月 -14     20-8月 -14 09.46.51.000000 上午
  12.  INTERVAL YEAR TO MONTH 数据类型使用年和月日期字段存储一段时间

    INTERVAL DAY TO SECOND 数据类型使用天,小时,分钟,秒存储一段时间

    SQL> drop table e purge;
    
    表已删除。
    
    SQL> create table e as select * from emp ;
    
    表已创建。
    
    SQL> alter table e add jg interval year to month;
    
    表已更改。
    
    SQL> desc e
     名称                                    是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     EMPNO                                              NUMBER(4)
     ENAME                                              VARCHAR2(10)
     JOB                                                VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                           DATE
     SAL                                                NUMBER(7,2)
     COMM                                               NUMBER(7,2)
     DEPTNO                                             NUMBER(2)
     JG                                                 INTERVAL YEAR(2) TO MONTH
    
    
    SQL> select empno,ename,hiredate,hiredate+jg from e;
    
    EMPNO ENAME  HIREDATE       HIREDATE+JG
    ----- ------ -------------- --------------
     7369 SMITH  17-12月-80     17-5月 -91
     7499 ALLEN  20-2月 -81     20-7月 -91
     7521 WARD   22-2月 -81     22-7月 -91
     7566 JONES  02-4月 -81     02-9月 -91
     7654 MARTIN 28-9月 -81     28-2月 -92
     7698 BLAKE  01-5月 -81     01-10月-91
     7782 CLARK  09-6月 -81     09-11月-91
     7788 SCOTT  19-4月 -87     19-9月 -97
     7839 KING   17-11月-81     17-4月 -92
     7844 TURNER 08-9月 -81     08-2月 -92
     7876 ADAMS  23-5月 -87     23-10月-97
     7900 JAMES  03-12月-81     03-5月 -92
     7902 FORD   03-12月-81     03-5月 -92
     7934 MILLER 23-1月 -82     23-6月 -92
  13.  约束

    约束是强加到表中的列上的规则

    oracle中提供了五种约束:

    NOT NULL
    UNIQUE
    PRIMARY KEY
    FOREIGN KEY
    CHECK


    约束规则:

    创建约束时,可以对约束进行命名,也可以使用SYS_Cn的格式自定义命名

    可以在以下时候创建约束:

    在表创建时同时创建约束
    在表创建以后创建约束

    在表或者列级别创建约束

    在数据字典中查看约束


    定义约束:

    列级别:

  14.  
  15.