数据库表约束

目录

一、约束的种类

二、非空约束(not null)

三、唯一性约束(unique)

3.1 字段级约束

四、主键约束(primary key,PK)

4.1 主键的概念(一张表例必须有外键的存在)

4.2 主键约束与“not null unique”的区别

4.3 主键的分类

4.4 自增

五、外键约束(foreign key,FK)

六、添加约束

6.1 添加非空约束

6.2 添加唯一约束

6.3 添加主键约束

6.4 添加外键约束

七、约束的删除

7.1 删除非空约束

7.2 删除唯一约束

7.3 删除主键约束

7.4 删除外键约束


一、约束的种类

1.非空约束(not null)
2.唯一性约束(unique)
3.主键约束(primary key,PK)
4.外键约束(foreign key,FK)
5.检查约束(目前MYSQL不支持,Oracle支持)

二、非空约束(not null)

用NOT NULL约束的字段不能为空值,必须给定具体的数据
  • 默认所有类型的值都可以是NULL,包括INT、FLOAT等数据类型;

  • 非空约束只能在某个列上单独约束,不能组合使用;

  • 一个表可以多列都约束非空;

  • 空字符串不等于NULL,0也不等于NULL

create table test(
id int not null,
email  varchar(20) unique
);

三、唯一性约束(unique)

3.1 字段级约束

unique约束的字段具有唯一性,不可重复,但可以为NULL
  • 同一个表可以有多个唯一约束

  • 唯一约束可以是某一个列的值唯一(字段级唯一约束),也可以是多个组合的值唯一(表级唯一约束)

  • 唯一约束允许列值为空

  • 在创建唯一约束的时候,可以给约束命名,如果不命名默认和列名相同

  • MySql会给唯一约束的列上创建一个唯一索引

create table test(
id int not null,
email  varchar(20) unique
);
在字段上加上唯一约束时,如果插入两个相同的邮箱就会报错

3.2 表级多字段联合约束

表级约束可以给约束起名字(方便后期通过这个名字来删除这个约束)

create table test(
id int not null,
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email)
);

constraint是约束关键字,y_user_email是自己给约束起的名字

四、主键约束(primary key,PK)

4.1 主键的概念(一张表例必须有外键的存在)

主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录;表中的某个字段添加主键约束后,该字段为主键字段,主键字段中出现的每一个数据都称为主键值

4.2 主键约束与“not null unique”的区别

1、作为Primary Key的域/域组不能为null,而Unique Key可以。
2、在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以
将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的,具体到某一列可能会重复。
3、更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。

4.3 主键的分类

单一主键:给一个字段加上主键约束
复合主键:给表中的多个字段联合添加一个主键约束(只能用表级定义)
单一主键定义和复合主键定义在一张表中只能出现一次

例:

create table test(
id int primary key,-- 单一主键定义
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email)
primary key(id) -- 表级单一主键定义
primary key(id,name) -- 复合主键定义
);

4.4 自增

在MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动生成,自增数从1开始,以1递增(auto_increment);
(1)一个表中只能设置一个自增主键
(2)当需要产生唯一标识符或者顺序值时,可设置自增增长
(3)自增长列约束得咧必须是键列(主键列或者单一键列)
(4)自增约束的列的数量类型必须是整数类型
(5)如果自增列指定了0或null,会在当前最大值的基础上自增长,如果自增长列手动指定了具体值,直接赋值具体值

例:

create table test(
id int auto_increment, -- 给id设置自增主键
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email),
primary key(id) -- 表级单一主键定义
);

五、外键约束(foreign key,FK)

外键:用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键;
A为基本表或父标,主表,B为信息表,子表,副表;
只能是表级定义;
foreign key(表的字段名) references 父表表名(父表的字段名);
某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值;

外键的分类

按外键约束的字段数量分类:单一外键:给一个字段添加外键约束;复合外键:给多个字段联合添加一个外键约束;
注意:一张表可以有多个外键字段(与主键不同);外键值可以为null;外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束有了外键引用之后,表分为父表和子表;

例:

学生表:
create table student(
id int auto_increment,
sname varchar(10) not null,
brithday datatime,
ssex char(4),
primary key(id)
)
班级表
create table class(
sid int ,
cid int primary key,
cname char(10),
foregin key(sid) reference classtab(id)-- 创建外键
)
​

六、添加约束

6.1 添加非空约束

alter table  表名modify test_studentchar(10) not  null; 

6.2 添加唯一约束

alter table 表名add unique(表字段名,字段,字段,字段);

6.3 添加主键约束

alter table 表名add primary key(表的字段名,字段,字段);

6.4 添加外键约束

alter table 表名add constraint N1 foreign key (表字段名) references 父表(父表字段名);

七、约束的删除

7.1 删除非空约束

alter table 表名modify 列名类型;

7.2 删除唯一约束

alter table 表名drop index 唯一约束名

7.3 删除主键约束

alter table 表名drop primary key;

7.4 删除外键约束

alter table 表名drop foreign key 外键名;

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

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

相关文章

矩阵分析——线性积分方程组的矩阵解法研究

矩阵分析——线性积分方程组的矩阵解法研究 前言线性积分方程组的矩阵解法研究 前言 “矩阵分析”是一门选修课,当时选这门课程的原因是想着图像处理就涉及到很多矩阵运算。但没想到的是这门课程吧虽然是选修,最后的结课要求是让我们写一篇“论文”&…

.dat 文件如何查看内容

第一种通过hexdump -C hexdump -C potk-00199D-0435-20000201.dat 命令查看 第二种 vscode ,将文件拖到vscode 工作区,选中要显示的乱码,点击右上角HEX图标,如下面两张图示

Nginx设置目录的访问权限,方便访问静态资源

从日志信息来看,确实是权限问题(Permission denied)。我们可以重新检查并设置权限,确保 Nginx 用户有权限访问这些文件。 检查 Nginx 用户: 首先确认 Nginx 使用的用户,一般是 www-data 或 nginx。你可以在…

java HashMap代码解释

SimpleHashMap的部分抄袭解释 package com.zzc.common.utils;import lombok.extern.slf4j.Slf4j;import java.io.IOException; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.AbstractCollecti…

UM980高精度RTK定位模块支持哪些通信接口?

注 产品参数信息请以和芯星通最新版官方手册为准。

python-NLP:1中文分词

文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法,主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行…

Java代码基础算法练习-字符串分类统计-2024.07.24

任务描述: 输入一行字符(字符串长度不超过255),分别统计出其中英文字母、数字、空格和其他 字符的个数。(提示,空格ASCALL码值为32) 解决思路: 输入一字符串,先判断是否…

C#-日期时间字符串转时间戳,并且考虑时区问题

/// <summary>/// 假定服务器机器时区为东八&#xff0c;配置timeString也为东八&#xff08;通常服务器和配置的时区也必须一致&#xff09;。利用utc相对时间差&#xff0c;计算出对应时间戳/// 此方法无需考虑客户端本地时区/// </summary>/// <param name&q…

对递归的一些理解。力扣206题:翻转链表

今天在刷力扣的时候&#xff0c;在写一道翻转链表的题目的过程中&#xff0c;在尝试使用递归解决该问题的时候&#xff0c;第一版代码却每次都返回的是null&#xff0c;这个错误让我尝试去debug了一下&#xff0c;最终找出了问题&#xff0c;并且让我对递归有了一些更深的理解&…

顶级电子合同平台推荐:2024年精选

本文将介绍以下10款工具&#xff1a;e签宝、法大大、上上签、金格签约、契约锁、DocuSign、Concord、PandaDoc、Agiloft、Evisort。 在当今数字化时代&#xff0c;选择一个合适的电子合同平台可能会让人感到困惑&#xff0c;如何判断哪个平台最适合企业的需求&#xff1f;电子合…

Linux 必备基础知识与常用命令大汇总

这是我整理的关于Linux基础知识的笔记&#xff0c;主要为了方便在长期不用Linux的情况下&#xff0c;突然需要使用时可以快速查找。我最初有些犹豫是否应该写成文章&#xff0c;但我认为对于处于相似境遇的人来说&#xff0c;能够方便地复制和使用这些知识会很有帮助&#xff0…

SpringCloud:使用OpenFeign优化前面的Nacos实现高效购物车商品信息处理

在现代电商系统中&#xff0c;购物车的性能直接影响用户的购物体验。为了提升系统性能和用户满意度&#xff0c;我们可以使用Spring Cloud的OpenFeign和负载均衡器来高效地处理购物车中的商品信息。本文将详细介绍如何在Spring Cloud中集成这些组件&#xff0c;并实现一个高效的…

【汽车】常见缩略语说明

缩略语英文名称中文名称3GPP3rd Generation Partnership Project第三代合作伙伴计划5GAA5G Automotive Association5g汽车协会APPApplication应用ADASAdvanced Driver Assistant Systems高级驾驶辅助系统CaaSCarasaService汽车即服务CANController Area Network控制器局域网络C…

Java之数组应用-选择排序-插入排序

已经完全掌握了冒泡排序和二分查找的同学&#xff0c;可以自己尝试学习选择、插入排序。不要求今天全部掌握&#xff0c;最近2-3天掌握即可&#xff01; 1 选择排序 选择排序(Selection Sort)的原理有点类似插入排序&#xff0c;也分已排序区间和未排序区间。但是选择排序每次…

Mysql备份恢复

目录 1.Mysql日志管理 1.1为什么需要日志 1.2日志作用 1.3数据丢失或破坏的原因 1.4常见日志类型之错误日志 1.5常见日志类型之通用查询日志 1.6常见日志类型之慢查询日志 1.7常见日志类型之二进制日志 1.8常见日志类型之事务日志 2.MySQL备份 2.1备份类型 2.2逻辑…

超低功耗ARM Cortex-M33 TZ MCU STM32WBA54、STM32WBA55:通过提升无线性能实现更出色的用户体验

摘要 STM32WBA54、STM32WBA55产品系列同时支持多种无线标准&#xff0c;包括Bluetooth低功耗 5.4&#xff08;已认证&#xff09;、Zigbee、Thread以及可用作Thread边界路由器的Matter。 该产品系列具有出色的灵活性和更强的安全性&#xff0c;可帮助开发人员应对不断变化的无…

新能源汽车的充电网络安全威胁和防护措施

1. 物理攻击&#xff1a;例如恶意破坏、搬走充电设施等&#xff0c;这可能会对充电设施造成损害&#xff0c;妨碍正常的电力传输。 2. 网络攻击&#xff1a; 黑客可能利用系统漏洞攻击网络&#xff0c;破坏设备&#xff0c;并窃取用户的个人信息、支付信息等&#xff1b; 车辆…

24暑假算法刷题 | Day21 | LeetCode 669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树题目描述题解 108. 将有序数组转换为二叉搜索树题目描述题解 538. 把二叉搜索树转换为累加树题目描述题解 669. 修剪二叉搜索树 点此跳转题目链接 题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪…

企业邮件系统管理(二)配置与优化指南

文章目录 企业邮件系统管理&#xff1a;配置与优化指南引言第一部分&#xff1a;了解邮件系统的基础架构一、MTA与MUA的定义及作用二、常见的邮件协议 第二部分&#xff1a;Exchange Server 2010的核心功能一、Exchange Server的服务器角色二、“典型安装”包含的服务器角色三、…

packet_write_wait: Connection to <IP> port <PORT>: Broken pipe

packet_write_wait: Connection to <IP> port <PORT>: Broken pipe 是一个常见的网络错误&#xff0c;指的是尝试向一个已经损坏的 TCP 连接写入数据。下面是这个错误的一些可能原因和解决方法&#xff1a; 可能的原因&#xff1a; 客户端断开连接&#xff1a; 远…