zoukankan      html  css  js  c++  java
  • Oracle 11g系列:约束

      约束是每个数据库必不可少的一部分,约束的目的在于保存数据的完整性。数据完整性是指数据的精确性和可靠性。数据库约束主要包括:主键约束、外键约束、唯一性约束、检查约束和默认值约束。

      1、主键约束

      主键约束可以保障数据完整性,防止数据表中的两条记录完全相同。通过主键输入查询条件,可以查询结果最多返回一条记录。

      主键被创建在一个或多个列上,通过这些列的值或者值的组合,唯一地标识一条记录。

      1>、创建主键约束

      主键约束作为表结构设计的一部分,一般在创建表的时候创建。创建主键约束使用关键字primary key。

      2>、查看主键约束

    select table_name,constraint_name,constraint_type,status from user_constraints
    where table_name='emp'
    select constraint_name,table_name,column_name from user_cons_columns
    where constraint_name='SYS_C005121'

      3>、显示命名主键约束

    CREATE TABLE EMP
    (
           EMP_ID NUMBER CONSTRAINT PK_EMP PRIMARY KEY,
           EMP_NAME VARCHAR(20)
    )
    CREATE TABLE EMP
    (
           EMP_ID NUMBER,
           EMP_NAME VARCHAR(20),
           CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID)
    )

      4>、创建多列主键

    CREATE TABLE EMP
    (
           EMP_ID NUMBER,
           EMP_NAME VARCHAR(20),
           CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID,EMP_NAME)
    )

      5>、为表添加主键

    ALTER TABLE EMP MODIFY (EMP_ID NUMBER PRIMARY KEY)

      6>、为表添加多列主键

    ALTER TABLE EMP ADD CONSTRAINT PK_EMP PRIMARY KEY(EMP_ID,EMP_NAME)

      7>、删除主键

    ALTER TABLE EMP DROP PRIMARY KEY

      DROP PRIMARY KEY用于删除表的主键,由于一个表的主键是唯一的,所以无须指定主键名。

    ALTER TABLE EMP DROP CONSTRAINT PK_EMP

      DROP CONSTRAINT用于删除表的约束,一个表的约束可能有多个,所以必须指定约束的名称。

      8>、启用/禁用主键

    ALTER TABLE EMP DISABLE PRIMARY KEY
    ALTER TABLE EMP ENABLE PRIMARY KEY

      9>、重命名主键约束名称

    ALTER TABLE EMP RENAME CONSTRAINT SYS_C005245 TO PK_EMP

      2、外键约束

      外键与之间用于用于保证数据完整性,主键是针对单个表的约束,外键则描述了表之间的关系。

      1>、创建外键约束

    CREATE TABLE CUSTOMERS
    (
           CUSTOMER_ID NUMBER,
           CUSTOMER_NAME VARCHAR(20),
           CONSTRAINT PK_CUSTOMERS PRIMARY KEY(CUSTOMER_ID)
    )
    CREATE TABLE ORDERS
    (
           ORDER_ID NUMBER,
           CUSTOMER_ID NUMBER,
           PRODUCT_NAME VARCHAR(20),
           QUANTITY NUMBER,
           CONSTRAINT PK_ORDERS PRIMARY KEY(ORDER_ID)
    )
    ALTER TABLE ORDERS ADD CONSTRAINT FK_ORDERS_CUSTOMERS FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMERS(CUSTOMER_ID)

      2>、查看外键

    SELECT TALBE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE, R_CONSTRAINT_NAME FROM USER_CONSTRAINTS
    WHERE TABLE_NAME = 'ORDERS'

      3>、级联删除

      ON DELETE CASCADE选项指定创建的外键实现级联删除,即删除主表的记录时,字表中的子记录同时被自动删除。删除子表记录的动作由Oracle数据自动实现的。

    ALTER TABLE ORDERS ADD CONSTRAINT FK_ORDERS_CUSTOMERS FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMERS(CUSTOM) ON DELETE CASCADE

      4>、重命名外键约束

    ALTER TABLE ORDERS RENAME FK_ORDERS_CUSTOMERS TO FK_ORDERS

      5>、启用/禁用外键

    ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS DISABLE
    ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS ENABLE

      在默认情况下,启用外键时,将会对已有的数据进行校验。可以使用NOVALIDATE选项,使Oracle不对已有数据进行校验,从而直接启用外键。

    ALTER TABLE ORDERS MODIFY CONSTRAINT FK_ORDERS_CUSTOMERS ENABLE NOVALIDATE

      6>、删除外键

    ALTER TABLE ORDERS DROP CONSTRAINT FK_ORDERS_CUSTOMERS

      3、惟一性约束

      1>、创建惟一性约束

    CREATE TABLE USERS
    (
           USER_ID NUMBER PRIMARY KEY,
           USER_NAME VARCHAR2(20),
           EMAIL VARCHAR2(100) UNIQUE
    )

      2>、添加惟一性约束

    ALTER TABLE USERS ADD CONSTRAINT UQ_EMAIL UNIQUE (EMAIL)

      3>、删除惟一性约束

    ALTER TABLE USERS DROP CONSTRAINT UQ_EMAIL

      4>、重命名惟一性约束

    ALTER TABLE USERS RENAME CONSTRAINT SYS_C005188 TO UQ_EMAIL

      5>、禁用/启用惟一性约束

    ALTER TABLE USERS DISABLE CONSTRAINT UQ_EMAIL

      或:

    ALTER TABLE USERS MODIFY CONSTRAINT UQ_EMAIL DISABLE

      4、检查约束

      检查约束对列值进行限制,将表中的一列或多列限制在某个范围内。

      1>、创建检查约束

    CREATE TABLE STUDENTS
    (
           STUDENT_ID NUMBER PRIMARY KEY,
           STUDENT_NAME VARCHAR2(20),
           SCORE NUMBER,
        CONSTRAINT CK_SCORE CHECK(SCORE BETWEEN 0 AND 100) )

      2>、添加检查约束

    ALTER TABLE STUDENTS ADD CONSTRAINT CK_STUDENT_NAME CHECK (LENGTH(STUDENT_NAME) <= 4)
    ALTER TABLE STUDENTS ADD CONSTRAINT CK_SEX CHECK (SEX IN ('',''))

      5、默认值约束

      1>、添加默认值约束

    ALTER TABLE ORDERS MODIFY QUANTITY DEFAULT 1

      2>、删除默认值

    ALTER TABLE ORDERS MODIFY QUANTITY DEFAULT NULL
  • 相关阅读:
    14.1.1 使用InnoDB 表的好处:
    7.5.1 Point-in-Time Recovery Using Event Times 使用Event Times 基于时间点恢复
    7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 使用binay log 基于时间点恢复
    7.4.1 Dumping Data in SQL Format with mysqldump
    7.3.2 Using Backups for Recovery 使用备份用于恢复
    7.3.1 Establishing a Backup Policy
    RR 和RC隔离问题
    mark
    weblogic12
    转一篇对EJB理解的文章
  • 原文地址:https://www.cnblogs.com/libingql/p/3594651.html
Copyright © 2011-2022 走看看