SQL_约束

约束

SQL 约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

  • not null 非空约束
  • unique 唯一约束
  • primary key 主键约束
  • Foreing key 外键约束
  • check 检查约束
  • DEFAULT - 规定没有给列赋值时的默认值。

1、表级约束和列级约束

作用范围:

  • 列级约束只作用在一个列上
  • 表级约束可以作用在多个列上

定义的方式:

  • 列级约束必须跟在列的后面进行定义

  • ​ 表级约束不与列一起 单独定义

  • ​ 非空约束只能定义在列上

2、约束的定义

1 . 非空约束(not null)
保证列值不能为空 只能定义在列上

-- 添加非空约束
sname varchar2(30)  not null,--给列添加非空约束 此时该列不允许插入空值
	ALTER TABLE Persons MODIFY Age int NOT NULL;-- 表已创建好时使用

非空约束也属于检查约束的一种

可以自定义约束的名称 如果自己不定义 则系统自动生成 (sys_数字+字母)

2 . 唯一约束(unique)
唯一约束 表示盖子字段的值 不能重复
唯一约束 允许出现null值 而且多个null值不违反唯一约束(null 和 null 是不一样的)

1)定义列约束:[Constrain <约束名>] Unique
2)定义表约束:Constrain <约束名>  Unique  ( <列名> [{<列名>}])     
 
email varchar2(100)  unique,--唯一约束
    phone  varchar2(11) constraint stu_phone_unique unique,

3 . 主键约束(primary key)

  • 等于 唯一约束 + 非空约束
  • 主键约束既可以定义在列上 也可以定义为表级约束
  • 每个表都应该有一个主键,并且每个表只能有一个主键。
  • 一般在表设计中 都会选取一个无意义列或者唯一列作为主键,但是也可以选取多个列作为联合主键
1)定义列约束:Constraint <约束名> Primary Key
2)定义表约束:[Constraint <约束名>] Primary Key( <列名> [{<列名>}])    

 constraint pk_sid_sname PRIMARY KEY(sid)
 constraint pk_sid_sname PRIMARY KEY(sid,sname) --联合主键  不推荐使用

4 . 列级约束
主要作用就是来给多张表添加关联的
FOREIGN KEY 外键的关键字,REFERENCES 表示关联的外键字段

constraint fk_stu_cls foreign key(cid) references classes(cid)--外键
-- 外键字段引用的值,必须是父表中存在的记录

删除和修改

  • 如果删 父表中的数据 该记录没有关联的子表记录 则可以直接删除
  • 如果有关联的子表记录 则不能直接删除父表的记录
  • 设置父表记录删除时 所关联的子表的修改方式
  • on delete cascade 表示级联删除 删除父表的时候 将关联到它的从表的记录全部删除
  • on delete set null 级联更新
    当删除父表的时候 从表关联的数据记录 设置为null 或者为一个新值 都可以

5 . 检查约束(check)
每一行必须满足的条件

 sage  number(2)  check (sage > 18 and sage < 60),--检查约束 系统命名
 constraint ck_sage check (sage > 18 and sage < 60),

3、修改约束

  • 添加和删除约束 但是不能修改已有的约束
  • 有效化或无效化约束
  • 添加not null 约束时候要使用modify
--从表
create table student(
    sid number(6)  ,
    sname varchar2(30) ,
    sage  number(2)  , 
    email varchar2(100), 
    phone  varchar2(11),
    hiredate DATE ,
    cid number(6)
 )
 --父表
 create table classes(
        cid number(6) primary key,
        cname varchar2(20)
 )
  --添加外键约束
  alter table student add constraint fk_stu_cls  foreign key(cid) references classes(cid) on delete cascade;
  alter table student MODIFY( sname varchar2(30) not null);--非空约束    SYS_C007587
  -- 删除约束
  alter table student drop constraint SYS_C007587;
  --无效化约束
  alter table student disable constraint SYS_C007588;
  -- 激活约束
  alter table student enable constraint SYS_C007588;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值