06_约束

news2025/4/26 7:57:03

文章目录

    • 一、是什么
    • 二、实体完整性约束
      • 2.1、主键约束
      • 2.2、主键自增长
      • 2.3、唯一约束
    • 三、域完整性约束
      • 3.1、非空约束
      • 3.2、默认值
    • 四、引用完整性约束

一、是什么

用于限制加入表的数据的类型和规范,约束是添加在列上的,用来约束列的

分类:

  • 实体完整性约束;
  • 域完整性约束;
  • 引用完整性约束。

二、实体完整性约束

2.1、主键约束

标识表中的一行数据,是该行数据的唯一标识,特性:

  • 非空;
  • 唯一;
  • 被引用(在外键中使用)。

当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。

我们通常创建一个和业务逻辑没有任何关系的,没有任何含义的列做主键列

# 创建表时指定主键
CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY,
	列名 数据类型,
	列名 数据类型
);

# 创建表时指定主键
CREATE TABLE 表名(
    列名 数据类型,
	列名 数据类型,
	列名 数据类型,
    PRIMARY KEY(设置为主键的列名)
);

# 修改表时指定主键(了解就行)
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY;

# 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

2.2、主键自增长

通常指定主键类为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性 。

# 创建表时指定主键
CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY AUTO_INCREMENT,
	列名 数据类型,
	列名 数据类型
);

# 修改表时设置主键自增长
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY AUTO_INCREMENT;
ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY AUTO_INCREMENT;

# 修改表时删除主键自增长
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;

2.3、唯一约束

某些列不能设置重复的值,所以可以对列添加唯一约束。
比如身份证号,学号,用户登录的用户名

# 创建表时指定唯一约束
CREATE TABLE 表名(
    列名 数据类型 UNIQUE,
	列名 数据类型,
	列名 数据类型
);

# 修改表时设置唯一约束
ALTER TABLE 表名 MODIFY 列名 列类型 UNIQUE;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 UNIQUE;

# 删除唯一约束
ALTER TABLE 表名 DROP INDEX name;

三、域完整性约束

3.1、非空约束

此列必须有值,某些列不能设置为NULL值

# 创建表时指定非空约束
CREATE TABLE 表名(
    列名 数据类型 NOT NULL,
	列名 数据类型,
	列名 数据类型
);

# 修改表时设置非空约束
ALTER TABLE 表名 MODIFY 列名 列类型 NOT NULL;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 NOT NULL;

# 删除非空约束
ALTER TABLE 表名 MODIFY 列名 列类型;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;

3.2、默认值

为列赋予默认值,当新增数据不指定值时,书写DEFAULT,以指定的默认值进行填充。

# 创建表时指定默认值
CREATE TABLE 表名(
    列名 数据类型 DEFAULT 默认值,
	列名 数据类型,
	列名 数据类型
);

# 修改表时设置默认值
ALTER TABLE 表名 MODIFY 列名 列类型 DEFAULT 默认值;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 DEFAULT 默认值;

# 删除默认值
ALTER TABLE 表名 MODIFY 列名 列类型;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;

四、引用完整性约束

这里说的引用完整性约束就是指的外键约束,作用:

  • 引用外部表的某个列的值;
  • 新增数据时,约束此列的值必须是引用表中已经存在的值。

外键的特点:

  • 外键必须是另一表的主键的值(外键要引用主键!);
  • 外键可以重复;
  • 外键可以为空;
  • 一张表中可以有多个外键。
    在这里插入图片描述
# 创建表时指定外键约束
CREATE TABLE 表名(
    列名 数据类型,
	列名 数据类型,
	列名 数据类型,
    CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
);

# 修改表时添加外键约束
ALERT TABLE 表名 ADD CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键);

# 修改表时删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 约束名称;

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

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

相关文章

Seata AT模式的一些常见问题及其源码解析

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata AT 基于两阶段提交协议的演变: 一阶段:业…

2025年3月29日(matlab -ss -lti)

线性时不变系统(LTI系统)的定义与核心特性 线性时不变系统(Linear Time-Invariant System)是信号与系统分析中的基础模型,其核心特性包括线性和时不变性。以下从定义、验证方法和应用场景展开说明: 1. 线性…

网络原理-TCP/IP

网络原理学习笔记:TCP/IP 核心概念 本文是我在学习网络原理时整理的笔记,主要涵盖传输层、网络层和数据链路层的核心协议和概念,特别是 TCP, UDP, IP, 和以太网。 一、传输层 (Transport Layer) 传输层负责提供端到端(进程到进…

第五十三章 Spring之假如让你来写Boot——环境篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

Router [Continuation Settings]

楼上网络CMCC-Wmew,楼下接收不到,可能因为喜好弱,再弄一台路由器中转一下 Router [Continuation Settings] 路由器中续设置 到这里这台K3的路由器设置完成了,作为转发,中续,她还需要设置上游路由器&#…

Zookeeper中的Zxid是如何设计的

想获取更多高质量的Java技术文章?欢迎访问Java技术小馆官网,持续更新优质内容,助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring Zookeeper中的Zxid是如何设计的 如果你们之前学习过 ZooKeeper,你们可能已经了解…

蓝桥云客 岛屿个数

0岛屿个数 - 蓝桥云课 问题描述 小蓝得到了一副大小为 MN 的格子地图,可以将其视作一个只包含字符 0(代表海水)和 1(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛屿由在上/下/左/右…

31天Python入门——第14天:异常处理

你好,我是安然无虞。 文章目录 异常处理1. Python异常2. 异常捕获try-except语句捕获所有的异常信息获取异常对象finally块 3. raise语句4. 自定义异常5. 函数调用里面产生的异常补充练习 异常处理 1. Python异常 Python异常指的是在程序执行过程中发生的错误或异…

浅析Android Jetpack ACC之LiveData

一、Android Jetpack简介 Android官网对Jetpack的介绍如下: Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that develo…

【区块链安全 | 第十五篇】类型之值类型(二)

文章目录 值类型有理数和整数字面量(Rational and Integer Literals)字符串字面量和类型(String Literals and Types)Unicode 字面量(Unicode Literals)十六进制字面量(Hexadecimal Literals&am…

Ubuntu修改用户名

修改用户名: 1.CTRL ALT T 快捷键打开终端,输入‘sudo su’ 转为root用户。 2.输入‘ gredit /etc/passwd ’,修改用户名,只修改用户名,后面的全名、目录等不修改。 3.输入 ‘ gedit /etc/shadow ’ 和 ‘ gedit /etc/…

Windows 系统下多功能免费 PDF 编辑工具详解

IceCream PDF Editor是一款极为实用且操作简便的PDF文件编辑工具,它完美适配Windows操作系统。其用户界面设计得十分直观,哪怕是初次接触的用户也能快速上手。更为重要的是,该软件具备丰富多样的强大功能,能全方位满足各类PDF编辑…

UE学习记录part11

第14节 breakable actors 147 destructible meshes a geometry collection is basically a set of static meshes that we get after we fracture a mesh. 几何体集合基本上是我们在断开网格后获得的一组静态网格。 选中要破碎的网格物品,创建集合 可以选择不同的…

Redis-07.Redis常用命令-集合操作命令

一.集合操作命令 SADD key member1 [member2]: sadd set1 a b c d sadd set1 a 0表示没有添加成功,因为集合中已经有了这个元素了,因此无法重复添加。 SMEMBERS key: smembers set1 SCARD key: scard set1 SADD key member1 …

vscode 源代码管理

https://code.visualstudio.com/updates/v1_92#_source-control 您可以通过切换 scm.showHistoryGraph 设置来禁用传入/传出更改的图形可视化。

iOS审核被拒:Missing privacy manifest 第三方库添加隐私声明文件

问题: iOS提交APP审核被拒,苹果开发者网页显示二进制错误,收到的邮件显示的详细信息如下图: 分析: 从上面信息能看出第三方SDK库必须要包含一个隐私文件,去第三方库更新版本。 几经查询资料得知,苹果在…

【LeetCode Solutions】LeetCode 101 ~ 105 题解

CONTENTS LeetCode 101. 对称二叉树(简单)LeetCode 102. 二叉树的层序遍历(中等)LeetCode 103. 二叉树的锯齿形层序遍历(中等)LeetCode 104. 二叉树的最大深度(简单)LeetCode 105. 从…

Orpheus-TTS 介绍,新一代开源文本转语音

Orpheus-TTS 是由 Canopy Labs 团队于2025年3月19日发布的开源文本转语音(TTS)模型,其技术突破集中在超低延迟、拟人化情感表达与实时流式生成三大领域。以下从技术架构、核心优势、应用场景、对比分析、开发背景及最新进展等多维度展开深入解…

Java数据结构-栈和队列

目录 1. 栈(Stack) 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环 3. 括号匹配 4. 逆波兰表达式求值 5. 出栈入栈次序匹配 6. 最小栈 1.5 概念区分 2. 队列(Queue) 2.1 概念 2.2 队列的使用 2.3 队列模拟实…

权重衰减-笔记

《动手学深度学习》-4.5-笔记 权重衰减就像给模型“勒紧裤腰带”,不让它太贪心、不让它学太多。 你在学英语单词,别背太多冷门单词,只背常见的就行,这样考试时更容易拿分。” —— 这其实就是在“限制你学的内容复杂度”。 在…