详解MySQL完整性约束

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户的操作。MySQL 完整性约束常用的操作有六大操作:

  1. 主键约束
  2. 唯一约束 unique
  3. 非空 not null
  4. 默认值约束(default)
  5. 自动增长约束(auto_increment)
  6. 外键约束(foreign key)

下面我们一一介绍一下:

主键约束 primary key

主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份,每个人都具有唯一的身份证号。设置表的主键是指在创建表时设置表的某个字段为该表的主键。

主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。主键必须满足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同,并且是非空值。主键可以是单一的字段,也可以是多个字段的组合。

特点:

  • 唯一且不为空
  • 主键可以由一个字段组成,也可以由多个字段组成
  • 如果主键可以由一个字段组成既可以添加到列级也可以添加到表级,但是如果由多个字段组成只能添加到表级

使用:

单字段主键添加可以定义的时候跟在后面,也可以在定义完成以后跟在最后:

CREATE TABLE user(id INT PRIMARY KEY, ......
);CREATE TABLE user(id INT , ......
PRIMARY KEY(id)
);

多字段主键

CREATE TABLE user( id INT ,name VARCHAR(50) ,......                    
[CONSTRAINT id_name]PRIMARY KEY(id, name)
);

给已有表添加主键

语法:alter table 表名 add [constraint 主键约束名] primary key(字段名);

CREATE TABLE user(id INT,name VARCHAR(50),.....
);ALTER TABLE user ADD CONSTRAINT constraint  PRIMARY KEY(id);

自增键约束 auto_increment

AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID。

特点:

  • 当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID,自动增长默认的初始值1,每增加一条记录,该字段的值会增加1;
  • 一个数据库表中只能有一个字段使用该约束;
  • 配合主键一起使用,该字段的数据类型必须是整数类型。
  • 由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成PK主键。
  • mysql8 中,AUTO_INCREMENT 必须设为键(主键、外键和唯一键均可)! 否则会报错!

使用:

CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT, ......
);

给已有表添加自动增长约束

语法:alter table 表名 modify 字段名 字段类型 auto_increment;

删除自增长约束

语法:alter table 表名 modify 字段名 字段类型;

唯一键约束 unique

特点:

  • 可以取空值
  • 不能重复
  • 一个表里可以有多个唯一键。

使用:

一个唯一键:

CREATE TABLE user( id INT ,name VARCHAR(50) UNIQUE ,......                    
);

多个唯一键:

create table user(id int(8),name varchar(20),age int(2),sex varchar(1),constraint uk_user_id_name unique(id,name)
);

给已有表添加唯一约束

语法:alter table 表名 add [constraint 唯一约束名] unique(字段1,字段2...);

删除唯一约束

语法:alter table 表名 drop index 唯一约束名;

非空约束 not null

当数据库表中的某个字段上的内容不希望设置为NULL时,可以使用not null约束进行设置。not null约束在创建数据库表时为某些字段上加上“NOT NULL”约束条件,保证所有记录中的该字段都有值。如果在用户插入的记录中该字段为空值,那么数据库管理系统会报错。

使用:

CREATE TABLE user(id INT NOT NULL , ......
);

默认值约束 default

当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。为了达到这种效果,可通过SQL语句关键字DEFAULT来设置。

使用:

CREATE TABLE user(tickname VARCHAR(50) DEFAULT ‘小美’, ......
);

给已有表添加默认值约束

语法:alter table 表名 modify 字段名 字段类型 default value;

删除默认值约束

语法:alter table 表名 modify 字段名 字段类型;

特点:

  1. 只能使用列级约束。
  2. 对于使用默认值约束,如果插入的数据为 “null”,则不会使用默认值,只有没有插入数据时候,才会使用默认值。

外键约束 foreign key

外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。

设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,两张表有关联关系,例如学生信息表(父表),考试信息表(子表);里面子表里面有张三的考试信息,它关联到了父表里面,要删除要一起删除,否则会有脏数据。

使用:

CREATE TABLE user( id INT ,name VARCHAR(50) ,......                    
[CONSTRAINT fk_name] FOREIGN KEY(id) REFERENCES formation(score)
);

其中,user参数是要设置外键的表名,id参数是要设置外键的字段,formation是父表的名称,score是父表中设置主键约束的字段名。

注意:目前外键,存储函数,存储过程,触发器…这些在后台开发过程中基本是不用的,因为这些限制逻辑或者代码逻辑是由mysql本身控制的,一个后端服务器的性能首先到瓶颈的是存储层模块,所以要把核心逻辑给mysql作,各个表的关系要放到业务层,不给mysql增加负担,外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。

列级约束和表级约束

(1)对一个数据列建立的约束,称为列级约束

(2)对多个数据列建立的约束,称为表级约束

(3)列级约束既可以在列定义时声明,也可以在列定以后声明

(4)表级约束只能在列定义后声明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计网仿真综合实验 实验十二

实验十二 综合网络实验 实验过程 IP配置说明参考连线配置OSPF使公司内部联通 路由器R1的OSPF配置路由器R2的OSPF配置路由器R3的OSPF配置R1、R2、R3的相关解释路由器R4的OSPF配置路由器R5的OSPF配置路由器R6的OSPF配置R4、R5、R6解释: 路由器R2的RIP配置路由器R7的RIP配置 总结 …

MicroPython esp32 连接wifi 配网

整体流程: 1)开启STA 和 AP 模式 2)扫描周围wifi 保存在 变量 wifi_list(后面要用到) 3) 尝试STA模式连接Wifi,并查寻状态。 4) 如果STA 无法连网,就用AP模式,创建热点。 5&a…

Radash 轻量级的函数工具集

Radash 是一个现代的 JavaScript 实用程序库,旨在提供高效、轻量级的函数工具集,类似于 Lodash,但更加现代化和模块化。Radash 通过提供一系列常用的工具函数,帮助开发者更轻松地处理数组、对象、函数等操作。 以下是一些 Radash…

Python中的列表(List)和元组(Tuple)的区别

在Python中,列表(List)和元组(Tuple)都是常用的数据结构,用于存储一系列的元素。然而,它们在多个方面存在着显著的区别。下面将从技术难点、面试官关注点、回答吸引力和代码举例四个方面来详细解…

【lesson1】第三方库(jsoncpp,bundle, httplib)的介绍和使用

文章目录 jsoncpp库json 认识jsoncpp 认识jsoncpp 实现序列化jsoncpp 实现反序列化 bundle库bundle库实现文件压缩bundle库实现文件解压缩 httplib 库httplib 库搭建简单服务器httplib库搭建简单客户端 jsoncpp库 json 认识 json 是一种数据交换格式,采用完全独立…

【Vscode配置java环境并配置stringboot】

1.VSCODE配置JAVA环境 参考这篇文章配置JAVA环境:连接 java版本,我是win11系统,我下载的JAVA安装版本是下面,是最新版的: 配置环境:步骤很简单,就是向系统环境变量中添加路径,参考上面文章中的…

(20)DAC接口--->(005)FPGA实现AD5601接口(五)

(005)FPGA实现AD5601接口(五) 1 目录 (a)FPGA简介 (b)IC简介 (c)Verilog简介 (d)FPGA实现AD5601接口(五) (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展…

基于学习模型的可学习小波变换方法(Pytorch)

首先以图像编码为例进行说明。 图像编码是一个复杂的系统,通常包含多个模块,其中变换模块具有重要作用。小波变换在图像编码领域得到了广泛的应用,例如著名的JPEG 2000就是一种小波图像编码方法。然而,现阶段的小波图像编码方法与…

htb-window-1-legacy-smb

nmap smb-vuln-ms08-067 py文件测试失败 msf 漏洞定位 反弹 获取flag

【Oracle篇】rman全库异机恢复:从单机环境到RAC测试环境的转移(第五篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

验证码案例

目录 前言 一、Hutool工具介绍 1.1 Maven 1.2 介绍 1.3 实现类 二、验证码案例 2.1 需求 2.2 约定前后端交互接口 2.2.1 需求分析 2.2.2 接口定义 2.3 后端生成验证码 2.4 前端接收验证码图片 2.5 后端校验验证码 2.6 前端校验验证码 2.7 后端完整代码 前言…

基于可解释性深度学习的马铃薯叶病害检测

数据集来自kaggle文章,代码较为简单。 import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)# Input data files are available in the read-only "../input/" directory # For example, runni…

快团团供货大团长如何查看帮卖团长的订单?

一、功能说明 可以看到团购中每个帮卖团长帮卖产生的订单 二、具体设置方法 1、小程序端如何操作? 在团购页面中,点击订单管理,在这里可以选择全部团长订单,我的团订单,和帮卖团长的帮卖订单。 2、PC端如何操作&am…

ssm616基于vue.js的购物商场的设计与实现+vue【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

几句话搞懂什么是docker image?它主要解决什么问题?他用什么技术实现的?

一、什么是docker image? 1、除去LinuxOS内核资源的用户空间的一组资源集合的快照。 2、使用laber区分版本。 3、使用仓库进行分发。 4、符合OCI标准的Runtime都可以运行docker image. 二、他主要解决什么问题? 1、最最重要的就是解决可移植性!当你本地…

【基于C++与OpenCV实现魔方图像识别和还原算法】施工总览图

文章目录 主要效果展示思维导图魔方还原算法 本系列博客长期更新,分为两大部分 OpenCV实现魔方六面识别 C编写科先巴二阶段还原算法实现三阶魔方的还原 主要效果展示 摄像头识别六面 3D图像构建,提供还原公式 动画演示还原过程 思维导图 魔方还原算法 参…

达梦8 开启物理逻辑日志对系统的影响

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内 容会被存储在重做日志文件中。 要开启物理逻辑日志的功能,需要…

Anaconda3 使用sudo运行时找不到命令

前言 最近在跑AI,使用到了Anaconda,但是在使用sudo命令运行的时候会出现找不到命令的情况 我的Anaconda是在chen这个普通用户下安装的,系统是 ubuntu20.04.06 LTS chenchen:~$ sudo conda sudo: conda: command not found解决方法如下: 编…

社区物资交易互助平台的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,论坛管理,公告信息管理 前台账户功能包括:系统首页,个人中心,论坛,求助留言板,公…