主要内容:
数据表本身只支持数据的存储操作,但是在数据库上为了保证数据表的数据完整性,特别增加了约束。即:数据需要满足若干条件之后才可以操作,例如:某些数据不能够重复,假设定义用户身份信息,身份证编号绝对不可能重复。本质上讲数据库中的约束一共六种:
数据类型、非空约束、主键约束、检察约束、外键约束。
但是约束条件是一把双刃剑,约束的确是可以保证数据合法后才进行保存,但是如果在一张表中设置过多的约束,那么更新一定会慢。所以在开发中,还是强烈建议给约束完成。
非空约束(NOT NULL,NK)
所谓非空约束指的是表中的某一个字段的内容不允许为空,如果要使用非空约束,只需要在每个列后面使用“NOT NULL"声明即可:
例:使用非空约束
表示name这个列上的数据不允许设置为null
例:正确的增加语句
在设置出现了违反非空约束的操作,那么会自动准确的定位到,哪个模式,哪张表,哪个字段,这样再进行错误排查的时候就很方便了。
唯一约束(UNIQUE,UK)
唯一约束的特点是在某一个列上的内容不允许出现重复,例如:现在要收集用户的信息,假设包含编号、姓名、email,很明显email不可能重复,所以就可以使用UNIQUE约束完成。
例:使用唯一约束
例:保存正确的数据
例:保存重复的内容
此时提示了错误
在ORACLE中约束也称为一个对象,也就是说你设置了约束。那么ORACLE会为你自动创建相关的约束对象信息,而这些过程都是自动完成的。那么既然是对象,所有数据都会在字典中进行保存。用户的约束字典应该使用:user_containts;
例:查询user_containts数据字典
可以发现user_constraints数据字典只显示用户约束属于哪张表,但是并没有告诉用户约束属于哪个列,所以此时可以利用另外一个数据字典:user_cons_columns;
例:查询user_cons_columns数据字典;
发现唯一约束不像非空约束那样,可以明确高数用户哪个列上出现问题,所以为了解决这样的错误,可以采用"约束简写_表_字段",例如:唯一约束的简写为”UK".所以现在email字段上设置了唯一约束,所以可以使用“uk_email"来作为此约束的名字,如果要指定名字,则必须在约束创建的时候完成,利用CONSTRAINTS关键字定义
例:创建唯一约束,同时设置约束名称
约束的名字绝对不能够重复,如果说现在设置了唯一约束,但是保存的是null呢
Null并不在唯一约束的范畴之中。
主键约束(PRIMARY KEY,PK)
主键约束=非空约束+唯一约束。也就是说设置为主键列,不能够为空。
例:增加正确的数据
99%情况下一张表只能定义一个主键,从SQL语法的角度是允许定义多个列为主键,这样的操作称为复合主键。如果是复合主键,则表示这若干个列的内容完全重复的时候才称为违反约束。
此时将mid与Name两个字段同时定义为主键,所以当两个字段完全重复时才表示违反约束。
例:增加正确的约束
数据库设计第一原则:不要使用复合主键,即:一张表就一张主键
检查约束(CHECK,CK)
检查约束指的是在数据列上设置一些过滤条件,当过滤条件满足时才可以保存,如果不满足则出现错误
例如:如果设置年龄的信息,年龄0~250、性别:男、女、不男不女
例:保存正确的数据,保存错误的数据(违反唯一约束条件)
外键约束(FOREIGN KEY,FK)
外键约束主要是在父子表关系中体现的一种约束操作,下面通过一个实例观察为什么会有外键约束存在。例如:现在需要描述一个概念,例如:一个人有多本书。如果要设计表,现在要设计两张数据表。
例:初期设计,不使用外键
此时member表中没有编号为9的雇员信息,但是此时没有设置所谓的约束,所以即使现在父表(member)中不存在对应的编号,那么字表也可以使用,但是这就是一个错误。实际上book表中的mid列的取值应该是有member表中mid列所决定,所以可以利用外键约束来解决此类问题
此时book.mid的列的取值范围由member.mid列所决定,如果内容正确,则可以保存。
所谓的外键就相当于子表中的某一个字段的内容由父表来定其具体的使用数据范围
对外键而言,他最麻烦的是存在一堆限制
member是父表,book是子表,如果说现在book表没有删除,那么member表无法删除
但有时将A表作为B表的父表,也将B表作为A表的父表,于是无法删除
为此在Oracle中专门提供了一个强制删除,删除之后不必关心子表
但是在实际的开发中还是按照顺序删除
级联更新:
如果说现在删除父表数据的时候,那么对应字表的外链列就设置为空。使用ON DELETE SET NULL 设置
修改约束(了解)
如果说表结构的修改还在可以容忍的范畴之内,那么约束的修改是绝对的100%禁止的。所有的约束一定要在表创建的时候就设置完整
实际上约束可以进行后期的添加以及后期的删除操作,但是要想进行这样的维护,那么必须要保证约束名称。
例:数据库脚本
利用以上的语法可以实现四种约束的增加:主键、唯一、检查、外键,不能包含有非空
删除约束,语法: