MySQL:表的约束(下)

news2024/11/23 3:21:54

文章目录

  • 自增长
  • 唯一键
  • 外键

自增长

下面介绍的是自增长字段,约束条件是auto_increment,意思就是说是自动进行增长,通常可以用在序号等,可以自动进行增长:

mysql> create table tt1 (
    -> id int unsigned primary key auto_increment,
    -> name varchar(20) not null 
    -> );
Query OK, 0 rows affected (0.10 sec)

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

那么这样就建好这个表了,那么具体是如何进行自增长的呢?

mysql> insert into tt1 (name) values('小明');
Query OK, 1 row affected (0.02 sec)

mysql> insert into tt1 (name) values('小红');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt1 (name) values('小刚');
Query OK, 1 row affected (0.01 sec)

mysql> select *from tt1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 小明   |
|  2 | 小红   |
|  3 | 小刚   |
+----+--------+
3 rows in set (0.00 sec)

如上所示,当插入三个人的名字信息之后,此时的id信息会依次增长,这就是自增长的约束条件

自增长的特点:

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  2. 自增长字段必须是整数
  3. 一张表最多只能有一个自增长

唯一键

这里可能需要区分一下唯一键和主键的概念,主键的意思更多是用来进行标识唯一性的,而唯一键更多是用来进行保证业务上,不能和其他的信息出现重复

比如说,在一个管理系统当中,我们选择ID号作为主键,但是可能对于读者的身份证信息也需要保证唯一性,那么此时就可以把身份证信息作为一个唯一键,具体如下所示:

mysql> create table tt2 ( id int unsigned primary key, qq char(10) unique, name
 varchar(20) );
Query OK, 0 rows affected (0.07 sec)
mysql> desc tt2;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int unsigned | NO   | PRI | NULL    |       |
| qq    | char(10)     | YES  | UNI | NULL    |       |
| name  | varchar(20)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into tt2 (id, qq, name) values(10, 123123, '小明');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tt2 (id, qq, name) values(10, 12312, '小亮');
ERROR 1062 (23000): Duplicate entry '10' for key 'tt2.PRIMARY'
mysql> insert into tt2 (id, qq, name) values(11, 12312, '小亮');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tt2 (id, qq, name) values(11, 12312, '小红');
ERROR 1062 (23000): Duplicate entry '11' for key 'tt2.PRIMARY'
mysql> insert into tt2 (id, qq, name) values(11, 123121, '小红');
ERROR 1062 (23000): Duplicate entry '11' for key 'tt2.PRIMARY'
mysql> insert into tt2 (id, qq, name) values(12, 123121, '小红');
Query OK, 1 row affected (0.01 sec)

mysql> select *from tt2;
+----+--------+--------+
| id | qq     | name   |
+----+--------+--------+
| 10 | 123123 | 小明   |
| 11 | 12312  | 小亮   |
| 12 | 123121 | 小红   |
+----+--------+--------+
3 rows in set (0.00 sec)

由此可见,主键和唯一键都可以保证唯一性,不过主键和唯一键的侧重点不一样

外键

外键用来定义主表和从表之间的关系,外键约束主要在从表上定义,而主表则必须是有主键或者唯一键进行约束,定义外键后,要求外键列数据必须在主表的主键列存在或者是null

比如我们现在有这样的表

在这里插入图片描述
那么对于上述的这个表,我们可以这样进行创建

首先要创建出主键表和从表

mysql> create table myclass (
    -> id int primary key,
    -> name varchar(20) not null 
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> create table stu (
    -> id int primary key,
    -> name varchar(30) not null,
    -> class_id int,
    -> foreign key (class_id) references myclass(id)
    -> );
Query OK, 0 rows affected (0.06 sec)

其次进行数据插入,先插入正常的数据

mysql> insert into stu (id, name, class_id) values(100, '张三', 10);
Query OK, 1 row affected (0.00 sec)

mysql> insert into stu (id, name, class_id) values(101, '李四', 20);
Query OK, 1 row affected (0.01 sec)

再插一个异常数据:

mysql> insert into stu (id, name, class_id) values(102, '王五', 30);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`base1`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `myclass` (`id`))

为什么错误?原因就是因为在是不存在id位30的班级的,必须要先创建id为30的班级,此时就可以正常插入了:

mysql> insert into myclass values(30, 'python');
Query OK, 1 row affected (0.01 sec)

mysql> insert into stu (id, name, class_id) values(102, '王五', 30);
Query OK, 1 row affected (0.01 sec)

看一下整体的结构:

mysql> select *from myclass;
+----+--------+
| id | name   |
+----+--------+
| 10 | C++    |
| 20 | java   |
| 30 | python |
+----+--------+
3 rows in set (0.00 sec)

mysql> select *from stu;
+-----+--------+----------+
| id  | name   | class_id |
+-----+--------+----------+
| 100 | 张三   |       10 |
| 101 | 李四   |       20 |
| 102 | 王五   |       30 |
+-----+--------+----------+
3 rows in set (0.00 sec)

class id和id是一一对应的

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

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

相关文章

UIOTOS:一款支持页面嵌套的前端零代码工具!可以搭建物联网平台上层业务应用

什么是UIOTOS? 这是一款拥有独创专利技术的前端零代码工具,专注于解决前端界面开发定制难题,原型即应用!具有页面嵌套、属性继承、节点连线等全新特性,学习门槛低,功能极为灵活。用户无需懂任何前端开发技…

盘点那些好用的SAP FIORI App (五)-管理银行账户

SAP的ECC系统里面,House Bank银行账户的维护是在GUI通过T-Code FI12进行创建修改的,但是升级到S4 HANA以后,FI12的创建维护功能已经取消,所有的house bank account,都要通过这个FIORI App 维护。 App ID 如下 银行账户创建 点击…

锐捷医疗全新亮相!全方案持续精进 加速智慧医疗信息化进程

3月30日,2024中华医院信息网络大会(CHINC)在青岛盛大开幕,锐捷网络受邀参展。作为医疗信息化建设领域的风向标大会,2024 CHINC汇集了全国各地医信领域的专家学者、科技厂商,围绕新技术如何与医疗信息化进程结合落地,加强智慧医疗建设、提高医疗服务质量和效率、促进公立医院高质…

【MySQL学习】MySQL的慢查询日志和错误日志

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

YOLOv8全网独家改进: 卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,小幅涨点的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡如…

python之正则表达式(2)

1、贪婪量词和懒惰量词 贪婪量词:也就是尽可能多的匹配字符 懒惰量词:尽可能少的匹配字符(在现在的计算机语言中大多默认为贪婪量词若想要使用 懒惰量词就需要在后面加上?即可) 代码示例: import rep …

【游戏分析】RPG类型游戏数据关联名称库加密算法

我们找到的无论是周围数组还是数组套链表结构里 都没有发现NPC名称 那么我们在不能直接观察得到的时候 只有单独去找名称属性了 找一个NPC搜索其名称 得到10几个 那么我们尝试修改看看是哪一个 发现是14这个地址 到DO中去看一下 发现周围全是其他的各种字符串 那这里应该…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

KVM+GFS分布式存储系统构建KVM高可用

概述 本章利用KVM 及 GlusterFS 技术&#xff0c;结合起来从而实现 KVM 高可用。利用 GlusterFS 分布式复制卷&#xff0c;对 KVM 虚拟机文件进行分布存储和冗余。分布式复制卷主要用于需要冗余的情况下把一个文件存放在两个或两个以上的节点&#xff0c;当其中一个节点数据丢失…

基于SSM+Jsp+Mysql的图书仓储管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

JavaSE继承和多态(上)

目录 一.继承的基本使用 1.继承的概念 2.继承的语法 3.父类成员访问 &#xff08;1&#xff09;子类中访问父类的成员变量 1.子类和父类不存在同名成员变量 2.子类和父类成员变量同名 (2)子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 二.super关键…

SpringCloudAlibaba基础使用(2024最全、最新)

一、简介二、服务注册配置Nacos2.1 下载启动2.2 服务注册2.3 服务配置2.3.1 NameSpace-GroupID-DataId 三、熔断限流 Sentinel3.1 介绍3.2 下载安装3.3 如何使用3.3.1 流控规则流控模式流控效果 3.3.2 熔断规则慢调用比例异常比例异常数 3.3.3 SentinelResource3.3.4 热点规则3…

分布式ID生成的几种方案(后续待补充)

分布式ID生成的几种方案 分布式ID的特性 唯一性&#xff1a;确保生成的ID是全网唯一的&#xff1b; 高可用性&#xff1a;确保任何时候都能正确的生成ID&#xff1b; UUID 算法核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID&#xff1b; 优点&#xff1a; 本地…

深度学习的数学基础--Homework2

学习资料&#xff1a;https://www.bilibili.com/video/BV1mg4y187qv/?spm_id_from333.788.recommend_more_video.1&vd_sourced6b1de7f052664abab680fc242ef9bc1 神经网络的特点&#xff1a;它不是一个解析模型&#xff0c;它的储存在一堆参数里面&#xff08;确定一个超平…

sql注入方式之联合注入

1.1 靶场环境 系统centos7 IP地址192.168.1.24 1.2 联合注入原理 联合查询注入是联合两个表进行注入攻击&#xff0c;使用关键词 union select 对两个表进行联合查询。两个表的字段要数要相同&#xff0c;不然会出现报错。 1.3 找注入点 找注入点&#xff0c;当输入id1 an…

环形链表 II - LeetCode 热题 26

大家好&#xff01;我是曾续缘&#x1f61b; 今天是《LeetCode 热题 100》系列 发车第 26 天 链表第 5 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 环形链表 II 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xf…

linux特殊引号

可见引号的不同&#xff0c;可以实现对不同内容的引用以及解析

近50位科技企业大咖齐聚共探出海之道,中国企业出海应该怎么卷?

4月2日下午&#xff0c;由中国云产业联盟暨中关村云计算产业联盟&#xff08;简称“云联盟”&#xff09;组织召开的“科技企业出海经验分享”专题闭门研讨会成功召开&#xff0c;云联盟执行会长兼秘书长龚梅&#xff0c;云联盟副秘书长、汉能投资董事总经理赵兰洋以及来自中国…

若依自带vue-cropper上传图片(可旋转、缩放)

2024.4.4今天我学习了如何使用若依的vue-cropper上传图片组件&#xff0c;在工作中遇到一个需求&#xff0c;需要对上传的图片进行旋转的操作&#xff0c;然后我先找到el-upload组件&#xff0c;使用之后发现它有一个自动上传和非自动上传的功能&#xff0c;是不是就可以通过非…

二:深入理解 JAVA 内存模型 JMM

目录 1、为什么要有内存模型1.1、为什么要有多级缓存&#xff1f;1.2、缓存一致性问题1.3、处理器优化和指令重排 2、并发编程的三大问题2.1、原子性问题2.2、有序性问题2.3、可见性问题2.4、三大特性 3、什么是内存模型&#xff1f;3.1、概念3.2、内存模型到底是怎么保证缓存一…