数据库的约束简介
约束的简介数据的完整性是指数据的正确性和一致性可以通过定义表时定义完整性约束也可以通过规则索引触发器等。约束分为两类行级和表级处理机制是一样的。行级约束放在列后表级约束放在表后多个列共用的约束放在表后。完整性约束是一种规则不占用任何数据库空间。完整性约束存在数据字典中在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的当约束启用时他增强了数据的完整性否则则反之但约束始终存在于数据字典中。约束类型总的来说有五种唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束有五大关键词UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT1。唯一性和主键约束。要求某一列或几列不能有重复的值建立主键约束和唯一约束时Oralce会基于约束列自动建立唯一索引主键约束不允许为NULL唯一约束允许为NULL一张表只能建立一个主键约束。唯一性和主键约束类似只是关键词不同而已语法一致。创建约束CREATE TABLE TABLE_NAME(COL1 VARCHAR2(32) NOT NULLPRIMARY KEY,)CREATE TABLE TABLE_NAME(COL1 VARCHAR2(32) NOT NULLCONSTRAINT 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_NameADD 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 NULLREFERENCES 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 后面的内容。这个是关联的关键。与删除修改密切相关。NO ACTION:更新或删除父表中的数据时如果会使子表中的外键违反引用完整性该动作将被禁止执行。CASCADE: 当父表中被引用列的数据被更新或删除时子表中的相应的数据也被更新或删除。SET NULL:当父表数据被更新或删除时子表中的相应数据被设置成NULL值前提是子表中的相应列允许NULL值。SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。3。检查约束。检查列的类型和范围。语法CONSTRAINT [constraint_name] CHECK (condition); 比如check(Age 2)4。空值约束、5。默认约束还有两种方式一种是默认值default sysdate或者 default 1一种是限制空值Not Null【NOT NULL只能在列级定义】这也可以看成是约束它的作用也是进行数据的完整性控制。修改默认约束ALTER TABLE TABLENAMEADD CONSTRAINT DF_TABLENAME_COL1DEFAUIT(22) FOR COL1修改空值约束修改NOT NULL是四个约束当中最特殊的直接用Modify Col_Name NOT NULL 即可删除、禁用、启用约束、修改约束名ALTER TABLE table_nameDROPCONSTRAINT constraint_name删除约束DISABLECONSTRAINT constraint_name;启用约束ENABLECONSTRAINT constraint_name;禁用约束ALTER TABLE table_nameRENAMECONSTRAINT old_constraint_nameTOnew_constraint_name修改约束名select alter table ||table_name|| disable constraint ||constraint_name||; from user_constraints where constraint_typeR;【禁用所有外键约束】select alter table ||table_name|| enable constraint ||constraint_name||; from user_constraints where constraint_typeR;【启用所有外键约束】select alter table ||table_name|| drop constraint ||constraint_name||; from user_constraints where constraint_typeR;【删除所有外键约束 】所有约束信息SELECT * FROM user_constraints