oracle 数据库的约束

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

--学生表是依附于班级表中的数据才能产生的 ,班级不存在了,也就不存在属于这个班的学生了
--意思就是说先有班级才能有对应班级的学生


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值