MySQL -- 表的约束

news2024/9/21 11:18:11

MySQL – 表的约束

文章目录

  • MySQL -- 表的约束
  • 一、表的约束
    • 1.空属性
    • 2.默认值
    • 3.列描述
    • 4.zerofill
    • 5.主键
    • 6.自增长
    • 7.唯一键
    • 8.外键


一、表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合
法性,从业务逻辑角度保证数据的正确性。

1.空属性

在字段类型后加null或not null修饰;
两个值:null (默认的)和not null(不为空);
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
在这里插入图片描述

  • 当设置某列的空属性为not null时,该列在插入数据时,必须插入有效数据,没有数据就会报错;
  • 可以插入空串;

2.默认值

在字段类型后加default修饰;
某一种数据会经常性的出现某个具体的值,可以在一开始就指定好, 在需要真实数据的时候,用户可以选择性的使用默认值;
在这里插入图片描述
设置列属性默认值后,插入数据该字段不赋值,就是用默认值:
在这里插入图片描述

  • not null与default:
    在这里插入图片描述
    如果一个字段同时设置了not null 和 default:意为不能将该字段的值显式设置为NULL,可以不赋值或者赋正常值;

3.列描述

在字段类型后加comment修饰;
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
在这里插入图片描述
通过desc无法查看注释信息,可以通过create table查看:
在这里插入图片描述

4.zerofill

在字段类型后加zerofill修饰;
数字类型后面的长度就是zerofill属性,相当于一个字段的默认宽度,表示如果插入数据的宽度小于默认宽度,就会自动填充0;
在这里插入图片描述
上图表中的三个字段:num1为默认int类型,num2的为设置了zerofill属性的int(5)类型,num3为设置了zerofill的默认int类型,向其中插入相同的数据:
在这里插入图片描述
可以看出num1不受zerofill的影响,num2和num3都进行了自动填充;

  • int类型默认zerofill的长度是10,这是为了默认能将整数的最大值显示出来(2^31 - 1);

5.主键

在字段类型后加primary key修饰;
主键:primary key用来唯一的约束该字段里面的数据, 不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型;

  • 创建表的时候直接在字段上指定主键:
    在这里插入图片描述
    设置id为主键;
    在这里插入图片描述
  • 主键字段不能重复,不能为空:
    在这里插入图片描述
  • 当表创建好但是没有主键时,可以后面追加主键:
alter table 表名 add primary key(字段列表);
  • 删除主键:
alter table 表名 drop primary key;
  • 复合主键:
    在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键;
    在这里插入图片描述
    复合主键的指定在所有字段说明之后,复合主键的单个字段允许重复,但是如果所有字段都重复,就无法插入数据;
    在这里插入图片描述

6.自增长

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

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

索引:

  • 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
  • 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
  • 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
  • 数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

设置id为自增长的主键:
在这里插入图片描述
如果显式向自增长字段中添加数据,自增长值就会更新为该字段最大的值+1;
在这里插入图片描述
也可以在建表时指定自增长的初始值:
在这里插入图片描述

7.唯一键

在字段类型后加unique修饰;
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空, 而且可以多个为空,空字段不做唯一性比较。
关于唯一键和主键的区别:

  • 主键更多的是标识唯一性的;而唯一键更多的是保证在业务上,不要和别的信息出现重复;
  • 我们数据库中的学生表,本质其实是用来描述一堆学生信息, 以一个学生为例:
    表中存的都是我们身上的属性值,有的是可以重复的,有的是不会重复的;
  • 唯一键和主键并不冲突,反而是互相补充的,共同维护表的完整性;
  • 主键:更多的是为了保证我们在查找的时候,找到唯一的一条记录;
    唯一键:更多的是为了保证在表中,某个字段的值不能重复,一定要在mysq|层面也保证他的唯一性;

将序号设置为主键,学号和邮箱地址设置为唯一键:
在这里插入图片描述
插入数据:
在这里插入图片描述
在这里插入图片描述

8.外键

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

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

主表字段和从表字段之间存在约束关系:
在这里插入图片描述

  • 定义一个主表:
    在这里插入图片描述
    在这里插入图片描述

  • 定义一个从表,其中从表的class_id定义为主表中id的外键:
    在这里插入图片描述
    在这里插入图片描述

  • 向表中插入数据:
    在这里插入图片描述
    在这里插入图片描述
    如上图所示,stu_tb中的class_id是class_tb表中id的外键,因此在向stu_tb插入数据时,class_id的值只能是class_tb表中id已经存在的值,这就是外键的约束关系;

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

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

相关文章

使用Selenium和Java编写爬虫程序

以下是一个使用Selenium和Java编写的音频爬虫程序,该程序使用了proxy的代码。请注意,这个示例需要在IDE中运行,并且可能需要根据您的系统和需求进行调整。 import java.io.IOException; import java.util.List; import java.util.concurrent…

PYTHON快捷键合集!学会让你成为大一最靓的仔

前言 大家好,我是艾登,一个始于JAVA终于PYTHON的老程序员,学习代码固然重要,但是在职场上能够知道打代码的各种快捷键的手法能够让你事半功倍,现在就由我来向大家介绍一下python各种快捷键的用法。 如果觉得对你有帮助…

机器学习(python)笔记整理

目录 一、数据预处理: 1. 缺失值处理: 2. 重复值处理: 3. 数据类型: 二、特征工程: 1. 规范化: 2. 归一化: 3. 标准化(方差): 三、训练模型: 如何计算精确度,召…

浅谈IIC总线通信协议

IIC IIC:集成电路总线(Inter-Integrated Circuit) 快速:400kbit/s 高速:3.4Mbit/s 速度由 SCL 决定,上升沿斜率受上拉电阻和等效电容影响。 物理层 两线式串行总线,可发送和接收数据。 数据线:SDA 时钟线…

栈和队列(2)

目录 🍁一、链表的概念 🍁二、针对本文章给出的几点注意事项: 🍁三、队列的实现 🌕(一)、代码定义 注意: 🌕(二)、初始化 🌕&am…

java.java.lang.NoSuchMethodError: org.bouncycastle.math.ec.ECFieldElement

目录 Java运行时异常:行时找不到指定的方法 1.前言2.原因2.1项目中的版本有冲突2.2项目中某个包缺少bouncycastle依赖 总结参考 1.前言 java.lang.NoSuchMethodError: org.bouncycastle.math.ec.ECFieldElement$Fp.(Ljava/math/BigInteger;Ljava/math/BigInteger;) java.lang…

(PC+WAP)照明科技类网站模板 LED灯具照明网站源码下载

(PCWAP)照明科技类网站模板 LED灯具照明网站源码下载 PbootCMS内核开发的网站模板,该模板适用于照明科技网站、灯具照明网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; pcwap,同一个后台&#…

【网安大模型专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会

How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景:漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…

SSO 系统设计_token 生成

SSO 系统设计_token 生成 目录概述需求: 设计思路实现思路分析1.增加依赖2.代码编写3.测试 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wai…

IT行业职场走向,哪些方向更有就业前景?——IT行业的发展现状及趋势探析

文章目录 每日一句正能量前言IT技术发展背景及历程IT行业的就业方向有哪些?分享在IT行业的就业经历后记 每日一句正能量 如果你认为你自己无法控制自己的情绪,这就是一种极为严重的不良暗示。 前言 在信息量浩如烟海、星罗棋布的大数据时代,…

深度学习第四阶段:NLP第二章 Transformer学习笔记

引言1:什么是注意力机制 参考我的一篇文章:https://blog.csdn.net/weixin_42110638/article/details/134011134?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134011134%22%2C%22source%22%3A%22weixin…

优优嗨聚集团:抖音外卖,美食与文化的完美结合

在今天的数字化时代,外卖行业正在迅速发展,而抖音外卖的出现,更是引领了外卖行业的新潮流。抖音外卖不仅满足了人们对美食的追求,还让人们在享受美食的同时,感受到了浓厚的文化氛围。 抖音外卖是抖音平台推出的一项全新…

RISC Zero zkVM性能指标

1. 引言 对应代码: https://github.com/risc0/risc0(C和Rust) 运行如下指令,进行性能评估: cargo run -r --example loop //CPU cargo run -r -F metal --example loop //Metal GPU cargo run -r -F cuda --exampl…

Seata入门系列【14】AT模式源码分析之二阶段全局提交和全局回滚

1 全局提交 1.1 前言 在之前我们分析了,开启全局事务,和业务执行时是如何校验全局锁和提交本地事务的,接下来分析下是如何进行全局提交的。 1.2 二阶段全局提交 核心代码还是在TransactionalTemplate类中,当TC 没有收到异常时…

2023高频前端面试题-http

1. HTTP有哪些⽅法? HTTP 1.0 标准中,定义了3种请求⽅法:GET、POST、HEAD HTTP 1.1 标准中,新增了请求⽅法:PUT、PATCH、DELETE、OPTIONS、TRACE、CONNECT 2. 各个HTTP方法的具体作用是什么? 方法功能G…

论坛议程|COSCon'23青少年开源与开源教育(E)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&a…

OceanGPT:面向海洋科学的大型语言模型初探

海洋覆盖了约 71% 的地球表面,对全球的气候调节、天气模式、生物多样性以及人类的经济发展都扮演着至关重要的角色。海洋科学专注于研究海洋的自然特性、其变化规律以及与海洋资源开发和利用相关的理论、方法与应用。 本文介绍一个为海洋领域打造的大型语言模型——…

分享一款低损耗 高效率高性能 低 VCE(sat) 晶体管 NSS60600MZ4T1G

关于低 VCE(sat) 晶体管? 是指其饱和电压 VCE(sat) 很低的晶体管。VCE(sat) 是指晶体管在饱和区时,集电极与发射极之间的电压降。低 VCE(sat) 晶体管的优点是在同样的电流下,其 VCE(sat) 更低,因此能够降低电路总成本&#xff0c…

Python的web自动化学习(二)Selenium安装和环境配置

前置条件: 1、安装Python并配置环境变量 2、安装编辑器PyCharm Seleenium安装 正文如下: python常见安装命令: 首先电脑 winR 打开 输入cmd,回车,使用pip安装selenium: 也可以使用命令:…

工作中出现什么「迹象」,表明你应该换工作了?

作者:苍何,CSDN 2023 年 实力新星,前大厂高级 Java 工程师,阿里云专家博主,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#xf…