约束详解程序员

约束定义

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。).

 

约束功能

 

约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

 

约束分类

约束分为6类: 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、条件(CHECK)约束、REF约束。

 

非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错 

唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。

主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。

外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。

条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。


约束命名规范

约束名称建议自己定义一套命名规则,否则使用系统生成的约束名,很难能把它和对应的表、字段联系起来。

    非空约束     NN_表名_列名
    唯一约束     UK_表名_列名
    主键约束     PK_表名
    外键约束     FK_表名_列名
    条件约束     CK_表名_列名
    默认约束     DF_表名_列名

如果约束名称超过32位长度,建议应该缩写表名,而不应用NN_表名_数字。不过具体视情况而定,很多时候 DF_表名_列名 这样命名,往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。

约束的基本语法

–班级表

  CREATE TABLE TCLASS(

  cl_id NUMBER,

  cl_name VARCHAR2(20) NOT NULL

  );

  –给TCLASS表添加主键

  ALTER TABLE TCLASS ADD CONSTRAINT PK_TCLASS_CL_ID

  PRIMARY KEY(cl_id);

  —学生表

  CREATE TABLE STUDENT(

  st_id VARCHAR2(30),–单行注释 主键

  st_code VARCHAR2(18), –唯一约束

  st_name VARCHAR2(30), –非空约束

  st_age NUMBER,

  st_birthday DATE, –默认约束

  –添加检查约束

  st_sex VARCHAR2(4),

  –添加外键(引用的是主表的主键)

  cl_id NUMBER

  );

  –给STUDENT表加主键

  ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT_ST_ID

  PRIMARY KEY(st_id);

  –给name列家非空约束

  ALTER TABLE STUDENT MODIFY st_name

  CONSTRAINT NAME_NOT_NULL NOT NULL;

  –给st_code添加唯一约束

  ALTER TABLE STUDENT ADD CONSTRAINT CODE_UNIQUE

  UNIQUE(st_code);

  –st_sex只能是男或女

  ALTER TABLE STUDENT ADD CONSTRAINT SEX_CHECK

  CHECK(st_sex=’男’ OR st_sex=’女’);

  –st_birthday默认为sysdate

  ALTER TABLE STUDENT MODIFY st_birthday DATE

  DEFAULT SYSDATE;

  —添加外键

  ALTER TABLE STUDENT ADD CONSTRAINT FK_CL_ID

  FOREIGN KEY(cl_id) REFERENCES TCLASS(cl_id);

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/7256.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论