oracle 数据库的 约束
什么是约束: 通俗来说约束就是一种规则,目的就是为了保证数据库中的数据的完整性和一致性的检查机制。
oracle数据库有五种类型的约束
第一种 约束: 主键约束(PRMARY KEY ) 作用:用来识别一个行的,添加了主键约束的列,具有唯一且非空的特性,一般主键会用来设置id的,因为id是一个有序且无意义的。
添加主键约束代码示例
--第一种添加方式
ALTER TABLE STUDENT ADD CONSTRAINT PK_STU_ID PRIMARY KEY(STU_ID);
--第二种添加方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4) CONSTRAINT PK_STU_ID PRIMARY KEY,--行级定义
STU_NAME VARCHAR2(10),
STU_CLASS NUMBER(4)
)
--第三种添加方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(4),
STU_CLASS NUMBER(4),
CONSTRAINT PK_STU_ID PRIMARY KEY(STU_ID); --表级定义
)
第二种约束:唯一约束(UNIQUE) 作用: 确保定义了唯一约束的列中的值,不存在重复的值,但可以为NULL。
添加唯一约束代码示例
--第一种添加方式
ALTER TABLE STUDENT ADD CONSTRAINT UN_STU_NAME UNIQUE(STU_NAME);
--第二种添加方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(4) CONSTRAINT UN_STU_NAME UNIQUE--行级定义
)
--第三种添加方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(10),
CONSTRAINT UN_STU_NAME UNIQUE(STU_NAME)--表级定义
)
第三种约束:非空约束(NOT NULL ) 被定义了非空约束的列 值不能为 null 。
代码示例:
--第一种添加方式
ALTER TABLE STUDENT MODIFY STU_NAME NOT NULL;
--第二种添加方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(4) NOT NULL--行级定义
)
第四种约束:检查约束(CHECK) 定义了该约束的列,可以定义一个表达式,用户输入基于该业务逻辑的表达式,符合规则就执行DML(data manipulation language)语句,不符合就ROOLBACK回滚。
代码示例:
--第一种定义方式
ALTER TABLE STUDENT ADD CONSTRAINT CH_STU_SEX CHECK(STU_SEX = '男' OR STU_SEX = '女');
--第二种定义方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(4),
STU_SEX VARCHAR2(3) CONSTRAINT CH_STU_SEX CHECK -- 行级定义
)
--第三种定义方式
CREATE TABLE STUDENT(
STU_ID NUMBER(4),
STU_NAME VARCHAR2(4),
STU_SEX VARCHAR2(3) ,
CONSTRAINT CH_STU_SEX CHECK(STU_SEX) -- 表级定义
)
第五种约束:外键约束(FOREIGN KEY (从表列) REFERENCES(主表列)) 作用:用来强制两个表之间的关系。定义了外键的从表中的(一个列)值与对应的主表中的引用建(一个列)中的值相对应,如果主表中的被引用的列中不存在该值,那么从表INSERT INTO 该值的时候就会被约束(不能添加进从表);
外键:将会引用到其它表(主表)中的列的数据,外键定义在从表中的列,
引用建:被从表中的外键锁引用的列,该列必须是定义了唯一约束或主键约束的列才行
代码示例:
--定义方式
--定义一个学生表
CREATE TABLE STUDENT(
STU_ID NUMBER(4) CONSTRAINT PK_STU_ID PRIMARY KEY,
STU_NAME VARCHAR2(4) CONSTRAINT UN_STU_NAME UNIQUE,
STU_CLASS NUMBER(4) CONSTRAINT UN_STU_CLASS UNIQUE
)
--定义一个班级表
CREATE TABLE T_CLASS(
C_ID NUMBER(4) CONSTRAINT PK_C_ID PRIMARY KEY,
C_CLASSNO NUMBER(4) CONSTRAINT UN_C_CLASS UNIQUE
)
--定义外键约束
ALTER TABLE STUDENT ADD CONSTRAINT FK_STU_CLASS FOREIGN KEY (STU_CLASS) REFERENCES T_CLASS (C_CLASSNO) ON DELETE CASCADE;
--级联关系
--删除主表数据的同时删除对应的从表数据,删除班级表中的数据的同时删除对应的学生表的数据
--ON DELETE CASCADE
-- ON DELETE SET NULL 删除从表数据时将对应的主表数据设置为NULL
--学生表是依附于班级表中的数据才能产生的 ,班级不存在了,也就不存在属于这个班的学生了
--意思就是说先有班级才能有对应班级的学生