MSQL 数据完整性(约束)
0. 前言
1. 实体完整性
- 1.1 主键约束(primary key)
- 1.2 唯一约束(unique)
- 1.3 自动增长列(auto_increment)
2. 域完整性
- 数据类型
- 非空约束
- 默认值约束
3. 引用完整性
4. 表间的映射关系
0. 前言
什么是数据完整性:保证用户输入的数据能正确地保存到数据库中。
如何确保数据完整性:在创建表时给表中添加约束。
完整性的分类:
- 实体完整性
- 域完整性
- 引用完整性
1. 实体完整性
什么是实体:表中的一行(一条记录)代表一个实体(entity)。
实体完整性的作用:标识每一行数据不重复。
约束类型:
- 主键约束(primary key)
- 唯一约束(unique)
- 自动增长列(auto_increment)
每个表可以有多个 UNIQUE 约束,但只能有一个 PRIMARY KEY 约束。
1.1 主键约束(primary key)
特点:数据唯一,且不能为 null。
-- 第一种添加方式
CREATE TABLE student_1(
id int primary key,
name varchar(50)
); -- 第二种添加方式:此种方式优势在于可以创建联合主键
CREATE TABLE student_2_1(
id int,
name varchar(50),
primary key(id)
); CREATE TABLE student_2_2(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
); -- 第三种添加方式
CREATE TABLE student_3(
id int,
name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);
1.2 唯一约束(unique)
特点:数据不能重复。
CREATE TABLE student(
id int primary key,
name varchar(50) unique
);
1.3 自动增长列(auto_increment)
-- 给主键添加自动增长的数值,列只能是整数类型,且必须配合主键使用
CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
); INSERT INTO student(name) values('tom');
2. 域完整性
域代表当前单元格。
域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较。
域完整性的约束分类:
- 数据类型
- 非空约束(not null)
- 默认值约束(default)
- check 约束(mysql 不支持):check(sex='男' or sex='女')
数据类型
非空约束(not null)
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
); INSERT INTO student values(1, 'tom', null);
默认值约束(default)
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default '男'
); insert into student1 values(1, 'tom', '女');
insert into student1 values(2, 'jerry', default);
insert into student1 values(3, 'peter');
3. 引用完整性(外键约束)
在设置外键(FOREIGN KEY)约束的情况下,插入表 2 的外键字段值必需要求在表 1 的主键字段值中能找到。
同时,假设要删除表 1 的某个主键字段值,那么必须保证表 2 中的外键字段没有该主键字段的值,否则就没法删除。
-- 创建表1
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default '男'
); -- 创建表2
-- 第一种添加外键方式
create table score(
id int,
score int,
sid int , -- 外键列的数据类型一定要与主表主键的类型一致
CONSTRAINT fk_score_sid foreign key (sid) references student(id)
); -- 第二种添加外键方式
ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
4. 表间的映射关系
示例:
一对一
例如 t_person 表和 t_card 表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以 t_person 是主表,而 t_card 是从表。
设计从表可以有两种方案:
- 在 t_card 表中添加外键列(相对 t_person 表),并且给外键添加唯一约束;
- 给 t_card 表的主键添加外键约束(相对 t_person 表),即 t_card 表的主键也是外键。
一对多(多对一)
最为常见的就是一对多。一对多和多对一,取决于哪个角度去看的,一般都是在多方的那张表创建外键。
多对多
例如 t_stu 和 t_teacher 表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系,例如可以再创建一张表 t_stu_tea 表,给出两个外键,一个是相对 t_stu 表的外键,另一个是相对 t_teacher 表的外键。
MSQL 数据完整性(约束)的更多相关文章
- enmo_day_06
RAC Data Guard (DG) EMC NAS SAN 双活 数据完整性 约束 : 主键 : 非空 且 唯一 非空 : 唯一 : 外键 : 检查 : DISABLE, ENABLE VALID ...
- oracle学习笔记(转)
命令行操作:打开服务: services.msc启动Oracle: net start OracleOraHome92TNSListener net start OracleService实例 ...
- MySQL技术内幕读书笔记(四)——表
目录 表 索引组织表 InnoDB逻辑存储结构 INNODB行记录格式 INNODB数据页结构 约束 视图 分区表 表 表就是关于特定实体的数据集合,是关系型数据库模型的核心. 索引组织表 在 ...
- SQL Server 2005 中的分区表和索引
SQL Server 2005 中的分区表和索引 SQL Server 2005 69(共 83)对本文的评价是有帮助 - 评价此主题 发布日期 : 3/24/2005 | 更新 ...
- SQL Server 数据完整性的实现——约束
SQL Server数据库采用的是关系数据模型,而关系数据模型本身的优点之一就是模型本身集成了数据完整性.作为模型一部分而实施的数据完整性(例如在创建数据表时的列属性定义)称作为声明式(Declara ...
- MySQL数据库:数据完整性及约束的应用
数据完整性 1.域完整性:---------匹配完整性:非空.缺省 字段/列 2.实体完整性:-------匹配完整性:主键.唯一键 记录/行 3.引用完整性:-------匹配完整性:外键 表与表之 ...
- T-SQL :SQL Server 定义数据完整性 6大约束(三)
1.创建一客户张表 IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees; CREATE TABLE dbo. ...
- Oracle 数据完整性与约束机制
为了维护数据库数据的完整性,在创建表时需要定义一些约束,Oracle中的约束类型包括:非空约束.主键约束.唯一约束.外键约束等.在对约束操作前,我们可以通过表名查询它具有的约束信息. 表约束 SELE ...
- 【第三章】MySQL数据库的字段约束:数据完整性、主键、外键、非空、默认值、自增、唯一性
一.表完整性约束 作用:用于保证数据的完整性和一致性==============================================================约束条件 说明PRIM ...
随机推荐
- 基于MATLAB的手写公式识别(9)
基于MATLAB的手写公式识别(9) 1.2图像的二值化 close all; clear all; Img=imread('drink.jpg'); %灰度化 Img_Gray=rgb2gray(I ...
- python3函数可变输入参量
技术背景 通常我们在python中定义一个函数的时候,需要给出明确的函数输入参量,比如对于一个数学函数\(z=f(x,y)\)就表示,\(z\)是关于\(x\)和\(y\)的一个函数.但是如果对于未知 ...
- 拿到蚂蚁金服的offer是一种什么体验?3年Java程序员分享面经
前言:我是一名三年的Java程序员,之前一直是在外包公司工作的.在这个月五号的时候,通过我的学长做内推,有了去蚂蚁金服面试的机会.我是在12号接到的电话面试的,因为蚂蚁金服需要7天的简历评估的.还有就 ...
- ip协议是哪一层的协议
IP协议对应于OSI标准模型的网络层. TCP/IP: 数据链路层:ARP,RARP 网络层: IP,ICMP,IGMP 传输层:TCP ,UDP,UGP 应用层:Telnet,FTP,SMTP,SN ...
- POJ2226 不错的最小顶点覆盖
题意: 给你一个n * m 的矩阵,上面有" * " 和 " . " ,让你用少的木板吧所有" * "覆盖,木板宽度是1,长度 ...
- 使用Windows全局钩子打造键盘记录器
简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...
- JVM虚拟机-了解Java堆中对象分配、布局和访问的全过程
目录 前言 对象的创建 类加载检查 分配内存 内存空间分配方式 指针碰撞 空闲列表 并发时的内存分配 同步处理:CAS 本地线程分配缓冲:TLAB 初始化零值 设置对象头 执行 init 方法 对象的 ...
- 脱壳入门----常见的寻找OEP的方法
一步直达法 所谓的一步直达法就是利用壳的特征.壳一般在执行完壳代码之后需要跳转到OEP处,而这个跳转指令一般是call ,jmp ,push retn类型的指令,而且因为壳代码所在的区段和OEP代码所 ...
- MindSpore保存与加载模型
技术背景 近几年在机器学习和传统搜索算法的结合中,逐渐发展出了一种Search To Optimization的思维,旨在通过构造一个特定的机器学习模型,来替代传统算法中的搜索过程,进而加速经典图论等 ...
- opencv——机器视觉检测和计数
引言 在机器视觉中,有时需要对产品进行检测和计数.其难点无非是对于产品的图像分割. 由于之前网购的维生素片,有时候忘了今天有没有吃过,就想对瓶子里的药片计数...在学习opencv以后,希望实现对于维 ...