Mysql数据库约束

前言

 数据库是用户数据的最后一道保护屏障,所以数据库存在大量的约束,保证数据库中数据的完整性和可预期性。数据库中,数据类型本身就是一种约束,除此在外还有: null/not null,default, comment,zerofill,primary key,auto_increment,unique key。

一、空属性 和default

 空属性包含两个值:null(默认的),not null(不为空)。在mysql中,默认的字段大多为null。并且在数据库中,null和空串不同,null表示什么东西都没有;而空串有东西,只不过内容为空!并且null不参与计算!我们可以直接在列类型后指明空属性。如果指明not null,此时插入数据时此列不能为空!
在这里插入图片描述

 default默认值可以在创建时指定,不知道为null。一旦指定后,用户在不显示插入数据时就是要默认值。

在这里插入图片描述

  • 在表中列字段设置为为no null,如果用户显示指定了数据,就插入用户自身输入数据;否则使用默认值。但如果默认值没有,为null,此时mysql会报错拦截该行为!

二、comment(列描述)

 comment本身是没有任何意义,任何约束的。comment类似于注释,用来给程序员看的。所以也可以认为是一种软约束,让程序员看到后约束自身尽量插入符合要求的数据!
在这里插入图片描述

三、zerofill

 我们在创建表时,类型int在表中的默认格式为int(10)。而数字10本身是没有任何意义的,但添加zerofill就不一样了。添加zerofill字段后,数字10表示输出结果的最小宽度。如果插入数据宽度比指定数字大,没有任何影响;但如果小于,剩余宽度会用0来填充!
在这里插入图片描述

四、primary key(主键)

 主键用来约束字段中的数据唯一性(不重复,并且不能为空)。在一张表中只能存在一个主键,并且主键列一般为整数类型!

在这里插入图片描述
 当表创建好后没有主键,可以采用如下方式再次追加主键

alter table 表名 add primary key(字段列表)

 当然也可以删除主键!

alter table 表名 drop primary key;

 除此之外,我们还可以将多个字段作为主键,设置复合主键!但复合主键中,只有当复合主键的所有字段的数据都冲突时,mysql才会拦截!

mysql> create table tt14(
-> id int unsigned,
-> course char(10) comment '课程代码',
-> score tinyint unsigned default 60 comment '成绩',
-> primary key(id, course) -- id和course为复合主键
-> );

五、auto_increment(自增长)

 auto_increment修饰的对应字段不给值时,系统会从该字段当前字段中已有值的最大值进行+1,将结果作为当前该字段对应数据进行插入!auto_increment通常配合主键使用,作为逻辑主键!

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

在这里插入图片描述

六、 唯一键(unique key)

 在一张表中,往往存在很多值需要保证为唯一性,主键虽然可以保证唯一性,但一张表中只能存在一个主键。所以mysql增加了唯一键,也用来约束字段保证数据的唯一性。

  • 一张表中,主键只能存在一个;而唯一键可以存在多个。
  • 主键修饰的字段不能为null,而唯一键可以。
  • 在业务中,我们通常将一些和业务无关的字段作为主键,用来标识唯一性;而唯一键更多用来保证业务数据的唯一性!

七、外键

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

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

相关文章

【大模型 AI 学习】大模型 AI 部署硬件配置方案(本地硬件配置 | 在线GPU)

最近想部署一个开源深度学习项目,但是小编的笔记本电脑是8G的集成显存,且没有GPU,性能肯定是不够的。于是小编在小po站上粗浅了解了一下当前: 1. 大模型 AI本地硬件配置和 2. 云上申请GPU算力的两种方式。简单记录一下: 参考视频…

openEuler 24.03 (LTS) 部署 K8s(v1.31.1) 高可用集群(Kubespray Ansible 方式)

写在前面 实验需要一个 CNI 为 flannel 的 K8s 集群之前有一个 calico 的版本有些旧了,所以国庆部署了一个v1.31.1 版本 3 * master 5 * work时间关系直接用的工具 kubespray博文内容为部署过程以及一些躺坑分享需要科学上网理解不足小伙伴帮忙指正 😃,生活加油 99…

Android2024.2.1升级错误

提示 Gradle 版本不兼容,升级后就报错了 。 1.gradle安装包镜像 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists //distributionUrlhttps\://services.gradle.org/distributions/gradle-8.5-bin.zip distributionUrlhttps://mirrors.cloud.tencen…

一个月学会Java 第2天 认识类与对象

Day2 认识类与对象 第一章 初识类 经过一个程序的编写,应该对程序的结构有点好奇了吧,如果你有基础,接下来的肯定非常的易懂,如果你没有基础也没有关系,反复琢磨一下也就懂了😆 我们来重复一下第一个程序 …

Pikachu-unsafe upfileupload-getimagesize

什么是getimagesize()? getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造,如果用这个函数来获取图片类型,从而判断是否时图片的话&#xff…

4.资源《Arduino UNO R3 proteus 电机PID参数整定工程文件(含驱动代码)》说明。

资源链接: Arduino UNO R3 proteus 电机PID参数整定工程文件(含驱动代码) 1.文件明细: 2.文件内容说明 包含:proteus工程,内含设计图和工程代码。 3.内容展示 4.简述 工程功能可以看这个视频 PID仿真调…

Graphiti:如何让构建知识图谱变得更快、更具动态性?

扩展大语言模型数据提取:挑战、设计决策与解决方案 Graphiti 是一个用于构建和查询动态、时间感知的知识图谱的 Python 库。它可以用于建模复杂、不断演变的数据集,并确保 AI 智能体能够访问它们完成非平凡任务所需的数据。它是一个强大的工具&#xff…

java将word转pdf

总结 建议使用aspose-words转pdf,poi的容易出问题还丑… poi的(多行的下边框就不对了) aspose-words的(基本和word一样) poi工具转换 <!-- 处理PDF --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres…

【WebGis开发 - Cesium】三维可视化项目教程---视点管理

目录 引言一、基础功能探索1. 镜头视角获取2. 镜头视角移动 二、进一步封装代码1. 封装hooks函数2. 看下效果3. 如何使用该hooks函数 三、总结 引言 本教程主要是围绕Cesium这一开源三维框架开展的可视化项目教程。总结一下相关从业经验&#xff0c;如果有什么疑问或更好的见解…

BM1 反转链表

要求 代码 /*** struct ListNode {* int val;* struct ListNode *next;* };*/ /*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param head ListNode类* return ListNode类*/ struct ListNode* ReverseList(struct …

学习资料库系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;观看记录管理&#xff0c;基础数据管理&#xff0c;论坛信息管理&#xff0c;公告信息管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&#xff0c;阅读资…

HTB:Ignition[WriteUP]

目录 连接至HTB服务器并启动靶机 1.Which service version is found to be running on port 80? 2.What is the 3-digit HTTP status code returned when you visit http://{machine IP}/? 3.What is the virtual host name the webpage expects to be accessed by? 4.…

如何把数组作为参数传递给函数(注意,只是传递数组名)?

直接上代码吧&#xff1a; template<class T, size_t nSize> void printArray(T(&Array)[nSize]) {T* pt Array;for (size_t n 0; n < nSize; n) {cout << *(pt n) << "\t";}cout << "\n"; } int main() {int ia[] {…

CPU飙高如何处理?

测试人员在压测的时候&#xff0c;会对应用进行测试&#xff0c;这个时候会查看cpu、内存、load、rt、qps等指标 CPU利用率是来描述CPU的使用情况的&#xff0c;表明了一段时间内CPU被占用的情况。使用率越高&#xff0c;说明机器在这个时间上运行了很多程序。 如何进行问题定…

【路径规划】多机器人路径规划

摘要 多机器人路径规划在现代自动化、仓储管理及智能交通系统中有着广泛的应用。本文提出了一种基于A*算法的多机器人路径规划方法&#xff0c;旨在解决多机器人在同一环境中的路径冲突问题。通过采用启发式搜索和路径优化策略&#xff0c;机器人能够在保持避障的前提下实现最…

c++----多态(初识)

大家好&#xff0c;今天我们来讲讲我们c中的一个关键知识&#xff0c;叫做多态。但是我们学习多态之前必须将我们前面学习过的继承学习过后才能学习。当然大家可能会先想什么叫多态&#xff0c;我们从名字上上看的话就是多种姿态嘛。毕竟看起来这么容易理解&#xff0c;但其实也…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25

输入序列连续的序列检测 描述 请编写一个序列检测模块&#xff0c;检测输入信号a是否满足01110001序列&#xff0c;当信号满足该序列&#xff0c;给出指示信号match。 模块的接口信号图如下&#xff1a; 模块的时序图如下&#xff1a; 请使用Verilog HDL实现以上功能&#x…

设置服务器走本地代理

勾选&#xff1a; 然后&#xff1a; git clone https://github.com/rofl0r/proxychains-ng.git./configure --prefix/home/wangguisen/usr --sysconfdir/home/wangguisen/etcmakemake install# 在最后配置成本地代理地址 vim /home/wangguisen/etc/proxychains.confsocks4 17…

基于基于微信小程序的社区订餐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

macos安装mongodb

文章目录 说明安装和配置安装mongodb配置PATH变量 验证日志及数据存放目录 mac启动和关闭mongodb后台启动失败问题mongodb-compass(GUI) 说明 Homebrew core 列表目前已经将 MongoDB 移除,不再为其提供支持。但是使用国内镜像的brew还是可以安装的&#xff01;这里直接从官网下…