mysql约束

来源:互联网 发布:evasi0n7 1.0.0 mac 编辑:程序博客网 时间:2024/05/21 10:16

约束类型

总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,

有五大关键词,UNIQUEPrimary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

1。唯一性和主键约束。

要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。

创建约束

CREATE TABLE TABLE_NAME

(

    COL1 VARCHAR2(32) NOT NULL PRIMARY KEY,

)

CREATE TABLE TABLE_NAME

(

    COL1 VARCHAR2(32) NOT NULL CONSTRAINT PK_ID PRIMARY KEY,

)

CREATE TABLE TABLE_NAME

(

    COL1 VARCHAR2(32) NOT NULL,

    COL2 VARCHAR2(32) NOT NULL Foreign Key,

    CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2)

)

修改约束

ALTER TABLE Table_Name

ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【这里表明了是聚集还是非聚集主键索引】

如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:

CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE)

 

 2。外键约束。

剩下的约束写法都是差不多,这里就不多举例了。

CREATE TABLE TABLE_NAME

(

    COL1 VARCHAR2(32) NOT NULL REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE,

)

CREATE TABLE TABLE_NAME

(

    COL1 VARCHAR2(32) NOT NULL,

    CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES    PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL

)

 

这里需要注意的是ON 后面的内容。这个是关联的关键。与删除修改密切相关。

  1. NO ACTION:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。
  2. CASCADE: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。
  3. SET NULL:当父表数据被更新或删除时,子表中的相应数据被设置成NULL值,前提是子表中的相应列允许NULL值。
  4. SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

3。检查约束。

检查列的类型和范围。语法:CONSTRAINT [constraint_name] CHECK (condition); 比如:check(Age >2)

还有两种方式,一种是默认值(default sysdate或者 default 1),一种是限制空值Not NullNOT NULL只能在列级定义】,这也可以看成是约束,它的作用也是进行数据的完整性控制。

修改默认约束:

ALTER TABLE TABLENAME

ADD CONSTRAINT DF_TABLENAME_COL1 DEFAUIT('22') FOR COL1

 

修改NOT NULL是四个约束当中最特殊的,直接用Modify Col_Name NOT NULL 即可

删除、禁用、启用约束、修改约束名

  1. ALTER TABLE table_name
  2. DROP CONSTRAINT constraint_name(删除约束)
  3. DISABLE CONSTRAINT constraint_name;(启用约束)
  4. ENABLE CONSTRAINT constraint_name;(禁用约束)ALTER TABLE table_name
  5. RENAME CONSTRAINT old_constraint_name TO new_constraint_name(修改约束名)

select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【禁用所有外键约束】

select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R';【启用所有外键约束】

select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R';删除所有外键约束 

所有约束信息:SELECT * FROM user_constraints

 

0 0
原创粉丝点击