【MySQL】表的约束(一)
文章目录
- 为什么要有约束
- 一. 空属性
- 二. 默认值
- 三. 列描述
- 四. zerofill
- 结束语
为什么要有约束
数据库是用来存放数据的,所以其需要保证数据的完整性和可靠性
数据类型也算是一种约束,比如,整型的数据无法插入字符型。
通过约束,让插入数据库的数据都是符合预期的,倒逼程序员插入正确的数据,而通过约束,在MySQL视角中,只要是插入成功的数据,都是符合预期的
一. 空属性
NULL(空)
NOT NULL(不为空)
' '(空串)
空串和空是不一样的,比如没有建行银行卡是空,空串是有建行银行卡但是没有钱
NULL不参与任何计算
mysql> select 1+NULL;
+--------+
| 1+NULL |
+--------+
| NULL |
+--------+
我们在建表时,属性如果没有说明not null,默认可以为NULL
mysql> create table student(-> id varchar(6),-> name varchar(3)-> );mysql> desc student;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | varchar(6) | YES | | NULL | |
| name | varchar(3) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
//插入数据
mysql> insert into student values (1,NULL);
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+------+------+
| id | name |
+------+------+
| 1 | NULL |
+------+------+
NULL一列为YES,允许为空。
但是这并不合理,既然要插入数据,学生的姓名和学号都不应该为空。
mysql> create table student(-> id varchar(6) not null,-> name varchar(3) not null-> );mysql> insert into student values (1,NULL);
ERROR 1048 (23000): Column 'name' cannot be null
mysql> insert into student values (1,'张三');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
+----+--------+mysql> show create table student \G;
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE `student` (`id` varchar(6) NOT NULL,`name` varchar(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
建表属性也会显示NOT NULL
二. 默认值
Default 默认值
默认值的使用是在该属性没有显示插入数据时使用
在创建表时,如果没有指定默认值,那么默认值为NULL
mysql> create table t1(-> id int-> );mysql> desc t1; //默认为空
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)mysql> show create table t1 \G;
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`id` int(11) DEFAULT NULL//默认为空
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
在建表时,指定默认值,那么在插入数据时,若没显示插入该属性数据,则使用默认值
mysql> create table person(->name varchar(4) not null,->age tinyint unsigned default 18
);mysql> insert into person (name) values ('张三');
Query OK, 1 row affected (0.00 sec)mysql> select * from person;
+--------+------+
| name | age |
+--------+------+
| 张三 | 18 |
+--------+------+
PS:如果设定属性为NOT NULL,则没有默认值
因为在建表属性中没有default null
mysql> create table t1(-> id int not null-> );mysql> show create table t1 \G;
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
三. 列描述
列描述:comment建表时使用,相当于注释,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
mysql> create table person(-> name varchar(4) not null comment '姓名',-> age tinyint unsigned comment '年龄',-> gender varchar(1) comment '性别'-> );mysql> show create table person \G;
*************************** 1. row ***************************Table: person
Create Table: CREATE TABLE `person` (`name` varchar(4) NOT NULL COMMENT '姓名',`age` tinyint(3) unsigned DEFAULT NULL COMMENT '年龄',`gender` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
四. zerofill
创建int类型属性时,显示的是int(10),这个10是什么意思呢?
其实是最大能显示的位数个数,使用zerofill验证
mysql> create table t1( ->id1 int,->id2 int zerofill->);mysql> desc t1;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id1 | int(11) | YES | | NULL | |
| id2 | int(10) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+mysql> insert into t1 values (200,200);mysql> select * from t1;
+------+------------+
| id1 | id2 |
+------+------------+
| 200 | 0000000200 |
+------+------------+
使用zerofill会将没有显示的位数用0填充
因为int为4个字节,有符号的int最大表示21亿,10位数足够表示,而无符号的使用11位表示足够
结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关文章:
【MySQL】表的约束(一)
文章目录 为什么要有约束一. 空属性二. 默认值三. 列描述四. zerofill结束语 为什么要有约束 数据库是用来存放数据的,所以其需要保证数据的完整性和可靠性 数据类型也算是一种约束,比如,整型的数据无法插入字符型。 通过约束,让…...
Excel宏管理库存清单
1. 开启宏: - 打开 Excel - 选择 “文件” > “选项” > “自定义功能区” > “开发工具” ,将其添加到功能区。 - 返回Excel界面,点击 “开发工具” 选项卡。 2.准备你的库存清单: - 在一个新的工作表中创建你的库存清单。…...
C语言练习百题之排序算法
题目:C语言实现排序算法 冒泡排序 思路: 依次比较相邻的元素,如果顺序不对则交换,直到整个数组有序。 实现代码: #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…...
通过ElementUi在Vue搭建的项目中实现CRUD
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…...
【CSS如何进行圣杯布局】
圣杯布局是一种经典的三栏布局,其中中间的主栏宽度自适应,两侧的边栏宽度固定。实现圣杯布局可以使用CSS中的浮动、定位、负边距等属性。 以下是一种实现圣杯布局的方法: HTML结构: <div class"container"><…...
flex 实现的圣杯布局
关键点 通过 margin-left 与 left 属性将左右两列放置到准确的位置; 父元素需要设置 padding; margin-left 取值为百分比时,是以其父元素的宽度为基准的;和双飞翼不同的地方 圣杯布局的的左中右三列容器没有多余子容器存在,通过控制父元素的 padding 空出左右两列的宽度。…...
数字人直播软件排名推荐,铭顺科技数字人品牌抢占“日不落”流量新技能
在今年的618中,相信大家能明显感受到,现如今已经有越来越多的品牌商都在使用AI营销工具,如AI营销工具、AI电话、AI虚拟主播。据京东战报显示,在今年的618中,使用AI数字人直播比去年双11增幅近5倍。 7*24小时不间断直播…...
【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Mon, 2 Oct 2023 Totally 42 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚PONG, Probabilistic Object Normals for Grasping 用于抓取的概率目标归一化,根据目标表面法向量获取的不确定…...
【计算机网络】网络编程接口 Socket API 解读(9)
Socket 是网络协议栈暴露给编程人员的 API,相比复杂的计算机网络协议,API 对关键操作和配置数据进行了抽象,简化了程序编程。 本文讲述的 socket 内容源自 Linux man。本文主要对各 API 进行详细介绍,从而更好的理解 socket 编程。…...
用户端App自动化测试
一、capability 进阶用法 1、 deviceName 只是设备的名字,别名随便起不能锁定唯一一个设备 2、 uid 多设备选择的时候,要指定 uid默认读取设备列表的第一个设备设备列表获取 adb devices 3、 newCommandTimeout appium 程序应等待来自客户端的新命…...
[洛谷]P2697 宝石串(经典好题!)
思路: 对于一个类似的东西进行前缀和: G R G G R G G:1 1 2 3 3 4 R:0 1 1 1 2 2 差:1 0 1 2 1 2 所得关于差的数列,同样的数最左最右的位置差为一个答案,选取最大的答案即为解࿰…...
毫米波汽车雷达测试应用指南
汽车毫米波雷达测试背景 车载毫米波雷达通过天线向外发射毫米波,接收目标反射信号,经后方处理后快速准确地获取汽车车身周围的物理环境信息(如汽车与其他物体之间的相对距离、相对速度、角度、运动方向等),然后根据所…...
抖音账号矩阵系统开发源码----技术研发
一、技术自研框架开发背景: 抖音账号矩阵系统是一种基于数据分析和管理的全新平台,能够帮助用户更好地管理、扩展和营销抖音账号。 抖音账号矩阵系统开发源码 部分源码分享: ic function indexAction() { //面包屑 $breadc…...
C++ 33.学习C++的意义-狄泰软件学院
一些历史 UNIX操作系统诞生之初是直接用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写,…...
[C++基础]-多态
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 本期学习目标&am…...
【Kubernetes】当K8s出现问题时,我们可以从哪些方面排查出
前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...
SentenceTransformer 之论文解读
摘要 原文标题:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks 链接:https://arxiv.org/pdf/1908.10084.pdf 尽管Bert和RoBERTa在句子对回归任务上,例如语义文本相似度(Semantic Text Similarity)…...
AI发展历史
一、AI的发展历史 二、AI发展的第五阶段 (一)、第一阶段 1.艾伦图灵与模仿游戏 艾伦•图灵(Alan Turing,1912~1954)是英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。二战中协助军…...
想要精通算法和SQL的成长之路 - 简化路径
想要精通算法和SQL的成长之路 - 简化路径 前言一. 简化路径 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 简化路径 原题连接 思路如下: 我们根据 "/" 去拆分字符串,得到每个子目录。这里拿到的子目录可能是空字符串,需要…...
【哈士奇赠书活动 - 41期】- 〖产品设计软技能:创业公司篇〗
文章目录 ⭐️ 赠书 - 《产品设计软技能:创业公司篇》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品设计软技能:创业公司篇》 ⭐️ 内容简介 在创业公司设计产品与在成熟公司设计产品存在明显差异。《产品设计软…...
Go语言集成Ollama本地大模型:gollama库实战指南
1. 项目概述:当Go语言遇上本地大模型如果你是一名Go语言开发者,同时又对本地运行的大型语言模型(LLM)感兴趣,那么你很可能已经感受到了两者之间的“次元壁”。一方面,Go以其简洁、高效和强大的并发能力&…...
Boss-Key终极指南:5分钟掌握办公隐私保护神器的一键隐藏窗口技巧
Boss-Key终极指南:5分钟掌握办公隐私保护神器的一键隐藏窗口技巧 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公…...
构建企业的知识图谱
在智能制造与大模型时代,构建制造企业的工业知识图谱(Industrial Knowledge Graph, IKG),是将企业沉淀在老师傅头脑中、纸面技术手册、PLM图纸以及MES日志中的“隐性知识”,转化为 AI 和工业智能体(Industr…...
【权威发布】Midjourney V6结构提示词标准白皮书(含官方未公开的4类语法优先级矩阵与37个避坑节点)
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6结构提示词的核心演进与范式变革 Midjourney V6 标志着生成式图像模型在语义理解与结构化表达上的重大跃迁。其提示词(prompt)系统不再仅依赖关键词堆叠࿰…...
TDAD时间序列异常检测实战:从算法原理到生产部署
1. 项目概述:从零开始理解TDAD最近在GitHub上看到一个名为“TDAD”的项目,仓库地址是zd8899/TDAD。乍一看这个缩写,很多朋友可能会有点懵,这到底是做什么的?是某个新框架,还是一个数据处理工具?…...
Syncia:轻量级本地文件同步引擎的设计原理与实战部署指南
1. 项目概述:一个轻量级、高可用的本地文件同步引擎 最近在折腾个人工作流和跨设备数据同步时,我一直在寻找一个既轻量又可靠、能完全由自己掌控的解决方案。市面上的云盘服务虽然方便,但涉及到隐私、速度限制和订阅费用,总感觉不…...
开源桌面宠物应用开发指南:从原理到实践
1. 项目概述:一个开源的桌面宠物应用 最近在逛GitHub的时候,发现了一个挺有意思的开源项目,叫“openclaw-desktop-pet”。简单来说,它就是一个可以让你在电脑桌面上养一只小宠物的应用。这只宠物不是静态的图片,而是一…...
如何轻松获取九大网盘直链下载地址:LinkSwift完整使用指南
如何轻松获取九大网盘直链下载地址:LinkSwift完整使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...
VCF 9.1 Consumption CLI 插件同步失败解决方法
一、问题现象 在 VCF 9.1 环境执行 vcf plugin sync 同步插件时,系统尝试下载 9.0.1 版本插件(环境实际为 9.1),出现以下错误: [i] Installing plugins from plugin group vmware-vcfcli/essentials:v9.0.1 [x] Fail…...
全国青少年信息素养大赛初赛(算法创意实践挑战赛C++初中组:样题带解析)
一、选择题 1、现有数组定义为 int array[5] {1};,数组 array 中的 元素分别是_____ A. 1 2 3 4 5 B. 0 0 0 0 1 C. 0 0 0 0 0 D. 1 0 0 0 0 答案:D 解析:int类型的数组中未赋值的元素,初始化赋值为0 2、在 C语言中&#…...
