少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          約束作用:用來保持數據的完整性,防止無效數據進入到數據庫中。
          oracle數據庫中提供的5種約束,都是限定某個列或者列的組合的。
          1、主鍵約束(PRIMARY KEY):
          在一個表中能唯一的標識一行。主鍵可以限定在多個列上。
          3、唯一鍵約束(UNIQUE key):在一個表中能唯一的標識一行,唯一鍵也可以限定在多個列上。
          主鍵和唯一鍵的區別:
          a、一個表中最多只能有一個主鍵。可以多個唯一鍵。
          b、主鍵所限定的列不能為null,唯一鍵所限定的列可以為null.
          2、外鍵約束(FOREIGN key):
             引用表:有外鍵約束的列所在的表。
             被引用表:外鍵所引用的列。被引用的列只能是主鍵或者唯一鍵。
          4、非空約束(NOT null):表示該列上的數據不能有null值。
          5、檢查性約束(check):表示該列上的數據必須滿足某一個條件表達式。

          如何創建約束:
          1、在創建表的同時創建約束
             a.列級別約束:在每個列寫完之后寫約束。
                    CREATE TABLE t_08132(id NUMBER(10) PRIMARY KEY ,
                                          NAME CHAR(10) NOT NULL,
                                          gender CHAR(2) CHECK (gender IN ('男','女')),
                                          email CHAR(20) UNIQUE
                                          )
                    INSERT INTO t_08132 VALUES(1,'a','男','1@neusoft.com')                               
                    INSERT INTO t_08132 VALUES(2,'a','男','2@neusoft.com')                               
                    INSERT INTO t_08132 VALUES(3,'c','男','3@neusoft.com')                               
                    INSERT INTO t_08132 VALUES(4,'d','','4@neusoft.com')                               
                    INSERT INTO t_08132 VALUES(5,'e','妖','5@neusoft.com')       
                    //外鍵約束
                    CREATE TABLE t_08133( id NUMBER(10) PRIMARY KEY ,
                                          NAME CHAR(10) NOT NULL,
                                          deptno NUMBER(2) REFERENCES dept(deptno)                               
                                          )
                    INSERT INTO t_08133 VALUES(1,'a',20) 
                    //給約束命名         
                    CREATE TABLE t_08134(id NUMBER(10) CONSTRAINT t4_id_pk PRIMARY KEY ,
                                          NAME CHAR(10) CONSTRAINT t4_name_nn NOT NULL,
                                          gender CHAR(2) CONSTRAINT t4_gen_ck CHECK (gender IN ('男','女')),
                                          email CHAR(20) CONSTRAINT t4_em_uk UNIQUE,
                                          deptno NUMBER(2) CONSTRAINT t4_deptno_fk REFERENCES dept(deptno)                               
                                          )
                    INSERT INTO t_08134 VALUES(5,'e','男','5@neusoft.com',NULL)                      
                    INSERT INTO t_08134 VALUES(6,'e','男','6@neusoft.com',NULL)                      
             b.表級別約束:在所有列寫完之后寫約束。注意,notnull約束不能寫在表級別上。
                CREATE TABLE t_08135(id NUMBER(10)  ,
                                          NAME CHAR(10) CONSTRAINT t5_name_nn NOT NULL,
                                          gender CHAR(2) ,
                                          email CHAR(20) ,
                                          deptno NUMBER(2) ,
                                          CONSTRAINT t5_id_pk PRIMARY KEY (ID),
                                          CONSTRAINT t5_gen_ck CHECK (gender IN ('男','女')),
                                          CONSTRAINT t5_em_uk UNIQUE(email),
                                          CONSTRAINT t5_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)                               
                                         )
          約束的名字:一般規則 約束所在的表_約束所在的列_約束類型
           emp_empno_pk,通常只給主鍵、外鍵、唯一鍵命名。

          2、在創建表之后創建約束
          語法:
          Alter TABLE 表名 ADD [CONSTRAINT 約束名] 約束類型 [(列名列表)]
          CREATE TABLE t08161 (ID NUMBER,NAME CHAR(10),sex CHAR(2) ,email CHAR(10),deptno NUMBER)
          //在ID字段上添加主鍵約束
          ALTER TABLE t08161 ADD CONSTRAINT t1_id_pk PRIMARY KEY(ID)
          //在sex字段上添加檢查性約束
          ALTER TABLE t08161 ADD CONSTRAINT t1_email_ck CHECK (sex IN ('男','女'))
          //在email上添加唯一性約束
          ALTER TABLE t08161 ADD CONSTRAINT t1_email_uk UNIQUE (email)
          //在deptno上添加外鍵約束,引用于dept的deptno字段。
          ALTER TABLE t08161 ADD CONSTRAINT t1_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)
          //在name上添加非空約束
          ALTER TABLE t08161 ADD CONSTRAINT t1_name_nn NOT NULL (NAME)    //加不上

          ALTER TABLE t08161 MODIFY NAME NULL  
          ALTER TABLE 表名 MODIFY 字段名 NULL/NOT NULL   //通過該語法設置某一個字段為null或者not NULL.
          //練習:
          創建表學生表,里面包含學號(主鍵),姓名(非空),年齡,入班日期,
          班級編號(外鍵,引用于dept表部門編號)
          要求,在創建完表之后建立約束。
          CREATE TABLE t08162 (sno NUMBER ,sname CHAR(10) ,sage NUMBER ,indate DATE,classno NUMBER)
          ALTER TABLE t08162 ADD PRIMARY KEY (sno)
          ALTER TABLE t08162 MODIFY sNAME NOT NULL
          ALTER TABLE t08162 ADD FOREIGN KEY(classno) REFERENCES dept(deptno)
          4、如何刪除約束
          ALTER TABLE 表名 DROP PRIMARY KEY|UNIQUE (列)|CONSTRAINT 約束名
          ALTER TABLE t08162 DROP PRIMARY KEY
          練習:刪除t08162上的classno上的外鍵約束
          ALTER TABLE t08162 DROP CONSTRAINT sys_c005467
          5、約束的啟用和禁用。
          語法:
          Alter TABLE 表名 Disable|ENABLE CONSTRAINT 約束名

          posted on 2012-09-04 23:08 abin 閱讀(2171) 評論(0)  編輯  收藏 所屬分類: DatabaseIndex
          主站蜘蛛池模板: 淮阳县| 石家庄市| 略阳县| 绥芬河市| 即墨市| 泾源县| 胶南市| 宁夏| 福清市| 特克斯县| 宜章县| 天水市| 南康市| 新兴县| 苗栗县| 塘沽区| 乌拉特后旗| 兴仁县| 临高县| 达孜县| 吴忠市| 博湖县| 南部县| 金乡县| 长子县| 邯郸市| 潞西市| 咸宁市| 吴江市| 千阳县| 金寨县| 大安市| 英吉沙县| 剑阁县| 友谊县| 马山县| 长白| 五原县| 永嘉县| 乡城县| 石柱|