数据库表的约束constraints
数据库表的约束constraints
- 数据完整性约束
- 表的数据有一定的取值范围和联系,多表之间的数据有时也有一定的参照关系。
- 在创建表和修改表时,可通过定义约束条件来保证数据的完整性和一致性。
- 约束条件是一些规则,在对数据进行插入、删除和修改时要对这些规则进行验证,从而起到约束作用。
- 完整性约束分类
- 域完整性约束(非空not null,检查check)
- 实体完整性约束(唯一unique,主键primary key)
- 参照完整性约束(外键foreign key)
约束类型 |
说明 |
主键约束(Primary Key) |
要求主键列数据唯一,并且不允许为空。主键可以包含表的一列或多列,如果包含表的多列,则需要在表级定义。 |
唯一约束(Unique) |
要求该列唯一,允许为空,但只能出现一个空值 |
检查约束(Check) |
某列取值范围限制、格式限制等,如年龄的约束 |
非空约束(not null) |
某类内容不能为空 |
外键约束(Foreign Key) |
用于两表间建立关系,需要指定引用主表的那列。外键通常用来约束两个表之间的数据关系,定义外键的那张表称为子表,另一张表称为主表。 在表的创建过程中,应该先创建主表,后创建子表。 |
- 创建约束的时机
- 在建表的同时创建
- 建表后创建
- 约束从作用上分类,可以分成两大类:
- 表级约束:可以约束表中的任意一列或多列。可以定义出了Not Null以外的任何约束。
- 列级约束:只能约束其所在的某一列。可以定义任何约束。
- 命名规则推荐采用:约束类型_约束字段
- 非空约束 NN__表名列名
- 唯一约束 UK_表名_列名
- 主键约束 PK_表名
- 外键约束 FK_表名_列名
- 检查约束 CK_表名_列名
- 主键约束
- 主键约束是数据库中最重要的一种约束。在关系中,主键值不可为空,也不允许出现重复,即关系要满足实体完整性规则。
- 主键从功能上看相当于非空且唯一
- 一个表中只允许一个主键
- 主键是表中能够唯一确定一个行数据的字段
- 主键字段可以是单字段或者是多字段的组合
- Oracle为主键创建对应的唯一性索引
create table t3(
id number(4), --primary key,
constraint t3_pk primary key(id) ---可自己给约束起名 t3_pk
)
- 唯一性约束
- 唯一性约束条件确保所在的字段或者字段组合不出现重复值
- 唯一性约束条件的字段允许出现空值,且可以多个空值
- Oracle将为唯一性约束条件创建对应的唯一性索引
CREATE TABLE employees(
id NUMBER(6),
name VARCHAR2(25) NOT NULL UNIQUE,
email VARCHAR2(25),
alary NUMBER(8,2),
hire_date DATE NOT NULL,
CONSTRAINT emp_email_uk UNIQUE(email)
);
- 非空约束
- 确保字段值不允许为空
- 只能在字段级定义
CREATE TABLE employees(
employee_id NUMBER(6),
name VARCHAR2(25) NOT NULL,
salary NUMBER(8,2),
hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL
)
- Check约束
- Check约束用于对一个属性的值加以限制
- 在check中定义检查的条件表达式,数据需要符合设置的条件
create table emp3
( id number(4) primary key,
age number(2) check(age > 0 and age < 100),
salary number(7,2),
sex char(1),
constraint salary_check check(salary > 0)
)
- 在这种约束下,插入记录或修改记录时,系统要测试新的记录的值是否满足条件
- 外键约束
- 外键是表中的一个列,其值必须在另一表的主键或者唯一键中列出
- 作为主键的表称为“主表”,作为外键的关系称为“依赖表”
- 外键参照的是主表的主键或者唯一键
- 对于主表的删除和修改主键值的操作,会对依赖关系产生影响,以删除为例:当要删除主表的某个记录(即删除一个主键值,那么对依赖的影响可采取下列3种做法:FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
- RESTRICT方式:只有当依赖表中没有一个外键值与要删除的主表中主键值相对应时,才可执行删除操作。
- CASCADE方式:将依赖表中所有外键值与主表中要删除的主键值相对应的记录一起删除
- SET NULL方式:将依赖表中所有与主表中被删除的主键值相对应的外键值设为空值
- [ON DELETE [CASCADE|SET NULL]] 如省略on短语,缺省为第一中处理方式。
- 添加约束
- ALTER TABLE 表名
- ADD CONSTRAINT 约束名 约束类型 具体的约束说明
- 删除约束
- ALTER TABLE 表名
- DROP CONSTRAINT 约束名
- 可增加或删除约束,但不能直接修改
数据库表的约束constraints的更多相关文章
- Oracle_数据库表的约束
Oracle_数据库表的约束 完整性约束分类 域完整性约束 (非空not null,检查check) 实体完整性约束 (唯一unique,主键primary key) 参照完整性约束 (外键forei ...
- DDL创建数据库,表以及约束(极客时间学习笔记)
DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...
- MySQL 表的约束与数据库设计
DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...
- Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID C ...
- Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束
Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎: MySQL中的数据用各种不同的技术存储在文件( ...
- 数据库之 MySQL --- 数据处理 之 表的约束与分页(七)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.约束 :为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制 ...
- SQLite 入门教程(三)好多约束 Constraints(转)
转于: SQLite 入门教程(三)好多约束 Constraints 一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应 ...
- SQLite 入门教程(三)好多约束 Constraints
一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应该翻译成约束更贴切一点. 那么什么是约束呢? 我们在数据库中存储数据的 ...
- 使用 hibernate 根据映射文件生成数据库表
为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容: 显示sql语句和格式化显示sql语句: <propert ...
随机推荐
- Openssl dsaparam命令
一.简介 dsaparam指令用来生成和操作dsa参数 二.语法 openssl dsaparam [-inform DER|PEM] [-outform DER|PEM] [-in filename ...
- [BAT] 以当前时间为名创建文件夹,将本地文件夹里的文件拷贝到远程共享目录,而且保证本地和Jenkins上运行都成功
@echo off rem connect to szotpc801 net use * /del /yes NET USE X: \\10.66.234.95\d$ Autotest123 /use ...
- Fix “Could Not Find This Item” When Deleting in Windows 7
If you’ve been using Windows for as long as I have, you have probably run into your share of weird e ...
- ubuntu启动流程和要读取相关文件
当前系统环境为:linux mint mate 17.1(基于ubuntu14.04的衍生版) 查阅资料后总结如下: 首先: /etc/rc.d链接目标为:/etc /etc/rc*.d文件夹中的脚本 ...
- Introduction mybatis
项目地址 https://github.com/mybatis/mybatis-3 英文官网 http://mybatis.github.io/mybatis-3/ 中文官网 http://mybat ...
- (转)构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码
原文地址:http://www.cnblogs.com/ymnets/archive/2013/11/16/3426454.html 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间 ...
- centos 7防火情配置
查看版本 firewall-cmd --version 2 查看指定端口是否开放 firewall-cmd --query-port=端口号/tcp 3 开放指定端口(--permanent表示永久, ...
- C,C++面试题2
面试题1:变量的声明和定义有什么区别为变量分配地址和存储空间的称为定义,不分配地址的称为声明.一个变量可以在多个地方声明,但是只在一个地方定义.加入extern修饰的是变量的声明,说明此变量将在文件以 ...
- Android-Activity-startActivityForResult
之前 Android-Intent意图传递数据,的博客讲解了,一个Activity 跳转 到另外一个Activity 可以把数据带过去 Android还提供了一种方式,一个Activity 跳转 到另 ...
- PMBOK项目管理相关知识梳理
该次梳理,依据PMBOK(第五版),罗列项目管理十三章节重要的知识点. 一.引论1.项目的定义与举例:2.项目.项目组合.项目集与项目组织管理:3.范进本质是风资(范围.进度.成本.质量.风险.资源) ...