再谈表的约束

news2024/9/23 15:31:00

在这里插入图片描述

文章目录

  • 自增长
  • 唯一键
  • 外键

自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长
mysql> create table if not exists tt21( id int unsigned primary key auto_increment, name varchar(20) not null );
Query OK, 0 rows affected (0.22 sec)

mysql> desc tt21;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20)  | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.06 sec)

mysql> insert into tt21 (name) values ('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt21 (name) values ('b');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt21 (name) values ('c');
Query OK, 1 row affected (0.00 sec)

mysql> select * from tt21;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+
3 rows in set (0.00 sec)


如果在插入时没有设定自增值,那么默认从1开始,如果插入了一个自增值,那么后面如果没有插入自增值,就从上一个继续开始:

在这里插入图片描述

也可以自己设定一个起始值:

mysql> create table tt22( id int  unsigned primary key auto_increment, name varchar(20) not null )auto_increment=500;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tt22 (name) values ('a');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt22 (name) values ('b');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt22 (name) values ('c');
Query OK, 1 row affected (0.01 sec)

mysql> select * from tt22;
+-----+------+
| id  | name |
+-----+------+
| 500 | a    |
| 501 | b    |
| 502 | c    |
+-----+------+
3 rows in set (0.00 sec)

在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值):

mysql> select last_insert_id();

唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

关于唯一键和主键的区别:我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。

mysql> create table stu( id char(20) unique comment '这是学生的唯一键', name varchar(32) not null );
Query OK, 0 rows affected (0.03 sec)

mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | char(20)    | YES  | UNI | NULL    |       |
| name  | varchar(32) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

如果插入的id是一样的,就会插入失败:
在这里插入图片描述

唯一键可以为空:
在这里插入图片描述

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:

foreign key (字段名) references 主表()

实例:
在这里插入图片描述

主表创建:

mysql> create table class(
    -> id int primary key,
    -> name varchar(32) not null
    -> );
Query OK, 0 rows affected (0.03 sec)

从表创建:

mysql> create table student( id int unsigned primary key, name varchar(20) not null, telephone varchar(32) unique key, class_id int, foreign key(class_id) references class(id) );
Query OK, 0 rows affected (0.06 sec)

主表中含有的信息:

mysql> select * from class;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | 物联网101    |
|  2 | 物联网102    |
+----+--------------+
2 rows in set (0.00 sec)

在从表中插入信息:
在这里插入图片描述
在从表中插入班级id为1和2都是可以的,但是插入的班级id为3,由于外键约束,导致插入失败。

删除主表中班级id为1 的班级:
在这里插入图片描述

id为1的班级里面还有学生,由于外键约束导致删除失败。

在这里插入图片描述

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

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

相关文章

分享一个拿来即用的柱状图绘制函数

分享一个自己写的柱状图绘制函数,可用来绘制横向的多柱状图、堆积柱状图,纵向的多柱状图、堆积柱状图。便于我们方便快捷的绘制相应的柱状图。该函数参数不多,只用于观察数据形式是足够的,若要绘制更加精美的柱状图,大…

Avnet ZUBoard 1CG开发板上手—深度学习新选择

Avnet ZUBoard 1CG 开发板上手—深度学习新选择 摘要 本文主要介绍了 Avnet ZUBoard 1CG 开发板的特性、架构、硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行基本介绍,同时辅以两个应用例程演示其功能。 原文链接: FreakSt…

clamp靶机复现

靶机设置 设置靶机为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.143 目录扫描 dirsearch 192.168.112.143 访问浏览器 提示让我们扫描更多的目录 换个更大的字典,扫出来一个 /nt4stopc/ 目录 目录拼接 拼接 /nt4stopc/ 发现页面中有很多…

数据结构----队列

一、队列 1)队列定义 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 允许插入的端是队尾,允许删除的端是队头。队列是一个先进先出(FIFO)的线性表,相应 的也有顺序存储和链式存储两种方式。 2&#…

macOS Sonoma 14.6.1 (23G93) Boot ISO 原版可引导镜像下载

macOS Sonoma 14.6.1 (23G93) Boot ISO 原版可引导镜像下载 2024 年 8 月 8 日凌晨,macOS Sonoma 14.6.1 发布,本更新包含了重要的错误修复,并解决了导致高级数据保护无法启用或停用的问题。同时带来了 macOS Ventura 13.6.9 安全更新。 本…

ant-design源码解析——Upload上传组件

前言 文件上传是我们开发中不可或缺的一部分,我们将在本文深入解析Ant Design Upload组件的实现。 相信看完以后对于React以及Ant Design的工作原理理解能更上一层楼。 Upload.tsx 入口函数upload.tsx直接引用了AjaxUpload组件,引用了一些能力&#…

UVa1660/LA3031 Cable TV Network

UVa1660/LA3031 Cable TV Network 题目链接题意分析AC 代码 题目链接 本题是2004年icpc欧洲区域赛东南欧赛区的题目 题意 给定一个n(n≤50)个点的无向图,求它的点连通度,即最少删除多少个点,使得图不连通。如下图所示…

Java日志体系框架总结:JUL、JCL、SLF4J、Log4j、Logback、Log4j2

概述 日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志,可以在程序出现问题时帮助开发人员迅速地定位错误的根源。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。 …

Day 22~28 MySQL

MySQL 1、数据库 JavaEE:企业级开发 Web 前端 (页面:展示,数据) 后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,给前端传递数据&…

dedecms织梦 验证码不显示问题

dedecms验证码不显示呢?近期小编仔细研究了一下并根据网上的各个版本总结下面几种解决方法: 问题一:首先先确定php配置环境没问题,如果一个服务器有的网站显示验证码有的不显示,可以排除运行环境的问题;出现这种情况有可能是&…

学习日志8.14--ALC(Access Control List)访问控制列表

ACL访问控制列表是一条或者多条流量规则的集合,作用主要用于流量的匹配,还可以匹配路由。通过ACL对流量加以控制,通过配合使用过滤工具,对流量进行拦截。需要注意的是ACL只是一个个匹配工具,负责匹配源IP地址、目的IP地…

nestjs 全栈进阶--typeorm 一对一

1. 介绍 在 TypeORM 中,一对一(One-to-One)关系是一种数据库关系,其中一个表中的每一行只与另一个表中的一行相关联。比如用户和身份证 2. 准备 我们还是将就上节课的项目,不过我们需要把数据库删除了 右键&#x…

[CSS3]2D与3D变换技术详解

文章目录 2D变换(2D Transform)3D变换(3D Transform)结语 CSS3中的2D变换与3D变换是指通过transform属性对HTML元素进行几何操作,使其在二维或三维空间中进行移动、旋转、缩放和倾斜等变换。这些变换为前端开发者提供了…

秒通多语种!2024年超实用的4款翻译在线工具,真心好用

互联网时代让沟通变得没有界限。不论是和邻居闲聊家常,还是与远在海外的朋友畅谈,现在都非常容易。特别是对于正在学习外语的人来说,在线翻译工具就像是超级英雄的披风一样重要。我研究了很多资料,找到了几款性价比非常高的翻译在…

Java虚拟机:类的加载机制

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 034 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

【BUU】[Dest0g3 520迎新赛]Really Easy SQL

2024/8/14 [Dest0g3 520迎新赛]Really Easy SQL 题目标题说明是SQL注入 题目首页 页面title显示是钓鱼站点。 钓鱼站点主要为将我们的输入信息保存在数据库。后台应该是插入语句。 这里无论输入什么都显示密码错误, 只能尝试盲注,基于时间的盲注, 这里经过测试p…

OPC DAY-上海场提前预告:Softing带您探索“智能工厂中的OPC应用”

(图片来源于:OPC基金会官网) 时间:2024年9月25日 14:00-14:30 | OPC DAY-上海站 地点:上海国家会展中心-5.1H M5-03会议室 2024年9月24-28日,第二十四届中国国际工业博览会将于国家会展中心(上…

Linux 中的同步机制

代码基于:Kernel 6.6 临界资源:指哪些在同一时刻只允许被一个线程访问的软件或硬件资源。这种资源的特点是,如果有线程正在使用,其他进程必须等待直到该线程释放资源。 临界区:指在每个线程中访问临界资源的那段代码。…

vue3结合海康WEB开发包,开发web在线预览视频

我们这里选择V3.3版本 文档地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type20&id4c945d18fa5f49638ce517ec32e24e24 解压过后,会有三个文件夹 在docs中,点开Demo使用说明,按照流程先测试下&…

赋能基层,融合创新:EasyCVR视频汇聚平台构建平安城市视频共享系统

一、雪亮工程建设的意义 雪亮工程的核心在于通过高清视频监控、环境监测和智能预警等先进技术手段,构建一个高效、智能、安全、便捷的社会安全防控体系。这一工程的建设不仅代表了现代化科技手段在城市治安管理中的应用,更是提升社会安全保障能力、推动…