MySQL-7.mysql约束

约束用于确保数据库中的数据满足特定的商业规则。

MySQL约束包含五种:not null、unique、primary key、foreign key、check

7.1 primary key 主键

字段名 字段类型 primary key
用于唯一的标识表的行数据,当定义主键约束后,该列不能重复。
  • primary key不能重复而且不能为null
  • 一张表最多只能有一个主键,但可以是复合主键(同时重复,才违反主键不可重复的原则)
  • 主键的指定方式有两种:直接在字段后指定:字段名 字段类型 primakry key
                                               在表定义最后写 primary key(列名);
  • 使用desc表名,可以看到primary key的情况
  • 在实际开发中,每个表往往都会设计一个主键
CREATE TABLE tab(id INT PRIMARY KEY, -- 表示 id 列是主键`name` VARCHAR(32));CREATE TABLE tab(id INT,`name` VARCHAR(32),PRIMARY KEY(id));
# 复合主键 (id 和 name 做成复合主键)
# 当id和name同时重复,才违反主键不可重复的原则
CREATE TABLE tab(id INT , `name` VARCHAR(32),email VARCHAR(32), PRIMARY KEY (id, `name`) -- 这里就是复合主键);

7.2 not null 非空

字段名 字段类型 not null
如果列上指定了not null,插入数据时必须为列提供数据

7.3 unique 唯一

字段名 字段类型 unique
如果列上指定了unique,该列数据不能重复
  • 如果没有指定 not null,则 unique 字段可以有多个null
  • 与主键的区别是:一张表可以有多个unique字段 
  • unique not null 使用效果类似 primary key

7.3 foreign key 外键

FOREIGN KEY  (本表字段名)  REFERENCES  主表名(主键名或unique字段名)
用于定义主表和从表之间的关系: 外键约束要定义在从表上,主表则必须具有主键约束或是unique约束。当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。

由于主表中没有id=300,从表class_id=300插入失败
如果要删除主表id=200的记录,会删除失败,因为有从表与它有外键约束,必须先删除从表class_id=200的记录,才能删除主表id=200的记录。
  • 外键指向的表的字段,要求是primary key 或者是unique
  • 表的类型是innodb,这样的表才支持外键
  • 外键字段的类型要和主键字段的类型一致(长度可以不同)
  • 外键字段的值,必须在主键字段中出现过,或者为nul[前提是外键字段允许为null]
  • 一旦建立主外键的关系,数据不能随意删除了
-- 创建 主表 my_class
CREATE TABLE my_class (id INT PRIMARY KEY , -- 班级编号`name` VARCHAR(32) NOT NULL DEFAULT '');-- 创建 从表 my_stu
CREATE TABLE my_stu (id INT PRIMARY KEY , -- 学生编号`name` VARCHAR(32) NOT NULL DEFAULT '', class_id INT , -- 学生所在班级的编号-- 下面指定外键关系FOREIGN KEY (class_id) REFERENCES my_class(id));

7.4 check

列名 类型 check(check条件)
用于强制行数据必须满足的条件。
假定在sal列上定义了check约束,要求sal列值在1000~2000之间,如果不再1000~2000之间就会提示出错。
在mysql中实现check的功能,一般是在程序中控制或者通过触发器完成。
CREATE TABLE tab (id INT PRIMARY KEY, `name` VARCHAR(32) , sex VARCHAR(6) CHECK (sex IN('man','woman')), sal DOUBLE CHECK ( sal > 1000 AND sal < 2000));

自增长:auto_increment

字段名 整型 primary key auto_increment
希望id列在添加记录的时候该列从1开始,自动的增长
插入数据是可以给null,或直接跳过该字段赋值
INSERT INTO tab VALUES(NULL, 'tom@qq.com', 'tom');
INSERT INTO tab (email, `name`) VALUES('hsp@sohu.com', 'hsp');
  • 一般来说自增长是和primary key 配合使用的
  • 自增长也可以单独使用[但是需要配合一个unique]
  • 自增长修饰的字段为整数型(虽然小数也可以但是非常少这样使用)
  • 自增长默认从1开始,也可以修改:alter table 表名 auto increment = 新的开始值;
  • 如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据. 

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

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

相关文章

安装包分析3

接上文&#xff0c;在主函数我们看到下载的函数InstallFunc&#xff0c;在这个下载的函数中&#xff0c;根据指引我们可以看见 下载所需要的函数 也就是 这段函数是一个安装程序的主要功能函数。它的作用是从文件中读取数据&#xff0c;并根据这些数据执行安装相关的操作。以下…

【MySQL】C# 连接MySQL

C# 连接MySQL 1. 添加MySQL引用 安装完MySQL之后&#xff0c;在安装的默认目录 C:\Program Files (x86)\MySQL\Connector NET 8.0 中查找MySQLData.dll文件。 在Visual Studio 中为项目中添加引用。 2. 引入命名空间 using MySql.Data.MySqlClient;3. 构建连接 private …

AI服务平台replicate

Replicate是一个提供优秀AI模型和工具的平台&#xff0c;旨在帮助用户实现各种人工智能任务。该平台汇集了来自各个领域的顶尖模型&#xff0c;涵盖了文本到图像生成、语言模型、图像编辑、超分辨率等多个领域。用户可以通过Replicate平台快速获取和应用先进的模型&#xff0c;…

设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

概述 本章学习状态模式。在实际的开发中&#xff0c;状态模式并不是很常用&#xff0c;但是在能够用到的场景里&#xff0c;它可以发挥很大的作用。从这一点上看&#xff0c;它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机&#xff0c;而状态机常用在游戏、工…

机器学习模型——GBDT和Xgboost

GBDT基本概念&#xff1a; GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;简称GBDT&#xff09;梯度提升决策树&#xff0c;是Gradient Boost 框架下使用较多的一种模型&#xff0c;且在GBDT中&#xff0c;其基学习器是分类回归树也就是CART&#xff0c;且使用…

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【c 语言】结构体的定义格式及变量初始化

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

【计算机考研】408算法大题怎么练?

先说结论&#xff1a;基础阶段学好各个数据结构与&#xff0c;重点是数组、链表、树、图。然后强化阶段突破算法提 在基础阶段&#xff0c;并不需要过于专门地练习算法。相反&#xff0c;基础阶段的重点应该放在对各种数据结构原理的深入理解上。在我个人的经验中&#xff0c;…

网络协议——VRRP(虚拟路由冗余协议)原理与配置

1. VRRP概述 单网关出现故障后下联业务中断&#xff0c;配置两个及以上的网关时由于IP地址冲突&#xff0c;导致通讯时断时续甚至通信中断。VRRP组播类的网络层协议 2. 协议版本 VRRP v2: 支持认证,仅适用于IPv4网络 VRRP v3: 不支持认证&#xff0c; 适用于IPv4和IPv6两种网…

数据结构—图

图的基本概念 图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为&#xff1a;G(V,E)&#xff0c;其中&#xff0c;G 表示一个图&#xff0c;V 表示顶点的集合&#xff0c;E 表示边的集合。 顶点 图中的数据元素&#xff0c;我们称之为顶点&#xff0c;图至少有…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

C语言自定义类型:联合与枚举的奇幻之旅

** 前言 ** 在C语言的世界中&#xff0c;数据类型犹如魔术师手中的魔法道具&#xff0c;各有其神奇之处。今天&#xff0c;我们就来揭开其中两种自定义类型——联合&#xff08;union&#xff09;和枚举&#xff08;enum&#xff09;的神秘面纱&#xff0c;带你一起探索它们背…

《荒野大镖客》游戏提示emp.dll文件丢失如何解决?

emp.dll它作为一种动态链接库&#xff08;DLL&#xff09;文件&#xff0c;在Windows操作系统中扮演着重要角色。当打开一个程序时&#xff0c;操作系统会将程序的代码和数据加载到内存中&#xff0c;并创建一个进程来运行该程序。在这个过程中&#xff0c;emp.dll负责将这些代…

Hot100【十一】:合并区间

// 先排个序 // 这里巧用链表&#xff0c;可以快速的获取到last&#xff0c;通过last数组的第二个元素和当前数组的第一个元素对比&#xff0c;如果当前数组的第一个元素<last数组的第二个元素, 就需要合并 class Solution { public int[][] merge(int[][] intervals) { // …

实现几何对象按照一定距离向外缓冲

1、首先&#xff0c;确保你已经引入了Turf.js库。你可以通过在HTML文件中添加以下代码来引入 <script src"https://cdn.jsdelivr.net/npm/turf/turf6.5.0/turf.min.js"></script>2、使用turf.buffer实现几何对象按照设定距离扩充 let originalCoordinat…

Linux系统安装内网穿透实现固定公网地址访问本地MinIO服务

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&am…

2024/4/1—力扣—主要元素

代码实现&#xff1a; 思路&#xff1a;摩尔投票算法 int majorityElement(int *nums, int numsSize) {int candidate -1;int count 0;for (int i 0; i < numsSize; i) {if (count 0) {candidate nums[i];}if (nums[i] candidate) {count;} else {count--;}}count 0;…

【资源分享】这个网站我愿称之为年度学术最伟大的发现

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

嵌入式学习51-单片机4

知识零碎&#xff1a; nop空指令 CRC校验 为了保证51单片与温度传感18b20 之间的高电平 采用一个上拉电阻改变电平的高低 温度寄存器原理

【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解(已附源码)

文章目录 前言AOP与Spring AOPAspect简单案例快速入门 一、Pointcutannotation 二、五种通知Advice1. Before前置通知2. After后置通知3. AfterRunning返回通知4. AfterThrowing异常通知5. Around环绕通知 总结 前言 在微服务流行的当下&#xff0c;在使用SpringCloud/Springb…