博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库中的约束
阅读量:5871 次
发布时间:2019-06-19

本文共 2637 字,大约阅读时间需要 8 分钟。

约束的种类

  • 主键约束   primary key

这个字段的值必须满足非空且该字段的值不能重复

一张表中只能有一个主键

 

  • 唯一性约束   unique

这个字段的值不能重复

一张表中的唯一性约束个数不受限制

不能检查NULL值

 

  • 非空约束    not null

这个字段的值不能是NULL值

一张表中的非空约束个数不受限

 

  • 检查约束    check(条件)

字段的值必须符合检查条件(条件由自己指定,where里写的这里都可以写)

 

  • 外键约束    references(参考/ 关联/ 引用)   

建立两张表的关联关系

          foreign key(外键)   指定字段

on  delete  cascade      级联删除

on delete  set  nill   级联置空

 约束的实现

  • 列级约束

在建立表时,直接在表的某一列之后加约束限制

  • 表级约束

在建立(定义)完表的所有列之后,再选择某些列加约束限制

 主键的列级约束实现

create table testcolumn_cons(id primary key, name varchar2(30));

 

insert into testcolumn_cons values(1, 'test1');

出错:00001,唯一性错误

如果不给约束起名字,则系统会自动为约束建立一个唯一的名字(但该名字比较难以理解)

 

如何给约束起名字(出错判断时,知道是哪一个出错了)

constraint(关键字)  约束名(表名_加约束的字段名_约束类型)
create table testcolumn_cons(id number constraint testcolumn_cons_idpl primary key, name varchar2(30));

 

这样出错时就知道是哪里出了错(起名要有规律)

主键的列级约束

演示:

  • 建立一张表,建立之前先删表
  • 这张表有id  number是主键    
  • fname  varchar2(30)   要求非空   
  • sname varchar2(30)  要求唯一
  • 要求给约束起名字

  

drop table testcolunm_cons;

 

create table testcolumn_cons(  id number constraint testcolumn_cons_id_pk primary key,  fname varchar2(30) constraint testcolumn_cons_fname_nn not null,  sname varchar2(30) constraint testcolumn_cons_sname_un unique);

  

  查看:

desc table testcolumn_cons;

增加检查约束:salary  number 检查条件:要求工资大于3500。

 

create table testcolumn_cons(id number constraint testcolumn_cons_id_pk primary key,  fname varchar2(30) constraint testcolumn_cons_fname_nn not null,  sname varchar2(30) constraint testcolumn_cons_sname_un unique,  salary number constraint testcolumn_cons_salary_ck check(salary>3500) );

 

  检测一下: 

insert into testcolumn_cons values(1, 'a', 'b', 3499);

  

主键的表级约束

  • 在约束关键字后面(要约束的字段名),非空不让有表级约束。
  • 定义完所有的字段和类型后,加“,”再加上表级约束。

演示:

  • 建立一张表  建立之前先删表
  • 这张表有id  number 是主键
  • fname varchar2(30)
  • sname varchar2(30)   要求唯一
  • salary number  要求工资大于3500
  • 要求给约束起名字
  • 增加约束,检查约束
create table testtable_cons(  id number,  fname varchar2(30),  sname varchar2(30),  salary number,  constraint testtable_cons_id_pk primary key(id),  constraint testtable_cons_sname_un unique(sname),  constraint testtable_cons_salary_ck check(salary>3500),);

not null  没有表级约束  

联合约束

在表级约束时,指定约束的字段时,可以约束多个字段

没有“联合非空”的说法,所以非空没有表级约束

演示:拿上面的例子再做一次,把id和fname绑成一个主键——联合主键(理论绑多个)                                                                                                     

把id和fname联合起来非空且唯一

这样是只有一个主键的!id+fname是主键

id    fname

1     a

1     b

1     NULL

都可以,id重复了也没关系,因为主键是联合的;

fname是NULL也没关系,联合的不为空就行。

 

create table testtable_cons(      id number,  fname varchar2(30),  sname varchar2(30),  salary number,  constraint testtable_cons_id_pk primary key(id),  constraint testtable_cons_sname_un unique(sname),  constraint testtable_cons_salary_ck check(salary>3500),);

表级约束  vs  列级约束

  • 表级约束:可以做联合约束
  • 列级约束:书写简单直观,无法完成联合约束

实际应用中混着用

唯一性(unique)只能区分非空值,不可以区分空值(NULL)

两个或多个NULL无法区分唯一性,实际中可以再设一个非空就可以了 

 

转载于:https://www.cnblogs.com/cjaaron/p/9216459.html

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
Struts2 <s:iterator > 用法
查看>>
ActiveMQ配置详解之如何配置自动重新连接
查看>>
cmd fsutil 命令 - 创建指定大小文件命令
查看>>
linux用grep查找文件内容
查看>>
sleep() wait() yield() join()
查看>>
Citrix 桌面及应用虚拟化系列之一:XenServer安装
查看>>
centos安装词典——图形界面的和命令行
查看>>
OSGI是什么
查看>>
spring session的生命周期
查看>>
mysql优化连接数防止访问量过高的方法
查看>>
Digester解析xml文件
查看>>
Spring Boot 属性配置和使用
查看>>
如何获取android源码
查看>>
AMQP协议
查看>>
Spring boot配置log4j
查看>>
高危bash漏洞来袭,小心你的服务器!
查看>>
Tomcat 基于域名的虚拟主机设置
查看>>
利用memcache来保存tomcat的session会话
查看>>