li
  当前位置:主页 > 配置管理 > 文章内容
li
ORACLE表间关系详述
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-08-26   阅读:20  
本文章共8405字,分5页,当前第1页,快速翻页:
 
限制主要有以下3種功能:
  1. 為資料庫內的表格建立實在的關係,例如 DEPT 和 EMP 表格的父子關係。
  2. 避免一些您不想要的資料進入資料庫,例如您不想資料庫儲存一個沒有名字的僱員紀錄。
  3. 避免刪除一些有關連性的資料,例如 EMP 與 DEPT 是有關連的,那就要避免您刪除 DEPT 表格,否則 EMP 的 DEPTNO 欄就不能對應到 DEPT 了。

總括來說,限制能夠維繫您的資料庫,和避免錯誤的資料進入資料庫。

Oracle 有以下5種基本的限制:

  1. Not Null - 非空
  2. Unique - 唯一的
  3. Check - 檢查
  4. Primary Key - 主要鍵
    • 組合 Primary Key
  5. Foreigh Key - 外來鍵

Not Null

您可以指定某個欄不可儲存 NULL 值,當您嘗試把該欄設為 NULL 值時,Oracle 會顯示錯誤訊息。以下示範如何把 EMPLOYEE_ID 一欄定義 NOT NULL 限制,並嘗試把它設為 NULL,引致 ORA-01400 錯誤:

SQL> CREATE TABLE EMPLOYEES (
  2      EMPLOYEE_ID  NUMBER(5)  NOT NULL
  3  );

Table created.

SQL> INSERT INTO EMPLOYEES VALUES(NULL);
INSERT INTO EMPLOYEES VALUES(NULL)
            *
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."EMPLOYEES"."EMPLOYEE_ID")

Unique

如果您想某欄的所有資料都必須是唯一的,即是不可出現重覆的值,那就可以把該欄定義 UNIQUE 限制,例如僱員識別碼一欄,因為它一般會用來識別不同的僱員,所以把它定義 UNIQUE 限制,Oracle 就會防止它含有重覆的值。不過,UNIQUE 限制只會檢查那些不是 NULL 的值是否重覆,而不會檢查 NULL 值。

SQL> CREATE TABLE EMPLOYEES (
  2      EMPLOYEE_ID  NUMBER(5)  UNIQUE
  3  );

Table created.

SQL> INSERT INTO EMPLOYEES VALUES(1);

1 row created.

SQL> INSERT INTO EMPLOYEES VALUES(1);
INSERT INTO EMPLOYEES VALUES(1)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C001265) violated

留意錯誤訊息出現的 SCOTT.SYS_C001265 ,其中的 SYS_C001265 是個限制名稱,其實您可以在定義一個限制時同時定義它的名稱,那麼當您違反了該限制時,Oracle 就會顯示該限制名稱,那就容易知道違反了什麼限制了。如果您沒有定義限制名稱,那麼 Oracle 會自動定義 SYS_Cxxxxxx 這樣子的名稱。

Check

Check 解作「檢查」,例如您可以檢查某個欄位的值是否符合某個條件,以下示範如何檢查 SALARY 一欄是否符合「少於 10000」這個條件:

SQL> CREATE TABLE EMPLOYEES (
  2      SALARY  NUMBER(6)  CHECK (SALARY <= 10000)
  3  );

Table created.

SQL> INSERT INTO EMPLOYEES VALUES(9000);

1 row created.

SQL> INSERT INTO EMPLOYEES VALUES(11000);
INSERT INTO EMPLOYEES VALUES(11000)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.SYS_C001267) violated

Check 限制只能檢查一些簡單的條件,例如把 SALARY 與 10000 這個固定的值比較,它不能與其它欄的值或變數比較。

Primary Key

Primary Key 限制的特性就是 Not Null 和 Unique 兩者的結合,即是說,定義為 Primary Key 的欄會同時受到 Not Null 和 Unique 的限制。以下示範 EMPLOYEE_ID 欄不能設為 NULL 值和不可含有重覆的值:

SQL> CREATE TABLE EMPLOYEES (
  2      EMPLOYEE_ID  NUMBER(5)  PRIMARY KEY
  3  );

Table created.

SQL> INSERT INTO EMPLOYEES VALUES(NULL);
INSERT INTO EMPLOYEES VALUES(NULL)
            *
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."EMPLOYEES"."EMPLOYEE_ID")


SQL> INSERT INTO EMPLOYEES VALUES(1);

1 row created.

SQL> INSERT INTO EMPLOYEES VALUES(1);
INSERT INTO EMPLOYEES VALUES(1)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C001268) violated 					  


阅读更多内容1 · 2 · 3 · 4 · 5 · 下一页>>


  上一篇: 如何查询一个表中某字段重复记录...   下一篇: ORA-02449: unique/primary keys...
li
 §相关评论  
 热点文章

·oracle Logfile的不同状态说明
·Oracle数据库的一些常用操作经
·Oracle10g(10.2) 在Redhat AS4
·oracle工具:浅谈LogMiner的使用
·RHAD AS4 上安装 Oracle 数据库
·oracle基础知识(物理结构)
·oracle基础:Oracle中null的使用
·Oracle常用基本语法操作集锦
·oracle数据库查询前台正在发出
·AIX+ORACLE10G安装手册
·oracle数据库9i升级到oracle10
li
 编辑推荐
·oracle Logfile的不同状态说明
·Oracle数据库的一些常用操作经
·Oracle10g(10.2) 在Redhat AS4
·oracle工具:浅谈LogMiner的使用
·RHAD AS4 上安装 Oracle 数据库
·oracle基础知识(物理结构)
·oracle基础:Oracle中null的使用
·Oracle常用基本语法操作集锦
·oracle数据库查询前台正在发出
·AIX+ORACLE10G安装手册
·oracle数据库9i升级到oracle10
li
 相关篇章
·如何查询一个表中某字段重复记录...
·ORA-01688:unable to extend tab...
·ORA-03113:end-of-file on comm...
·逻辑standby数据库的创建过程
·Oracle9i中flashback闪回数据
·oracle SMON_SCN_TIME
·oracle9i 的flashback 一些问题
·oracle如何查看已经打过的补丁
·怎么样计算REDO BLOCK的大小
·控制文件包含哪些基本内容
·ORA-02449: unique/primary keys...
·oracle日常操作汇总:日志篇
·oracle日常操作汇总:表空间篇
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接