【MySQL】数据类型和表的约束

news2024/11/23 13:06:19

1. 数据类型

分类数据类型解释
数值类型BIT (M)位类型。M位数,默认为1范围1-64
BOOL01表示真假
TINYINT [UNSIGNED]8位整型
SMALLINT [UNDIGNED]16位短整型
INT [UNSIGNED]32位整型
BIGINT [UNSIGNED]64位长整型
小数类型FLOAT [ (M, D) ] [UNSIGNED]32位浮点类型,M整体长度,D小数长度
DOUBLE [ (M, D) ] [UNSIGNED]64位浮点类型,M整体长度,D小数长度
DECIMAL (M, D) [UNSIGNED]M整体长度,D小数位数
文本、二进制类型CHAR (SIZE)定长字符串,L字符个数,最大255字符
VARCHAR (SIZE)变长字符串,L字符个数,最大65535字节
BLOB二进制数据
TEXT大文本,不支持全文索引,不支持默认值
时间日期DATEyyyy-mm-dd仅日期格式,占3字节
DATETIMEyyyy-mm-dd hh:mm:ss格式,支持自定义,占8字节
TIMESTAMPyyyy-mm-dd hh:mm:ss格式,实际是时间戳,占4字节
String类型ENUM单个字符串对象,多选一
SET字符串对象集合,多选多

1.1. 数值

ERROR 1264 (22003): Out of range value for column 'number' at row 1

SQL会直接拒绝插入越界的数据。数据类型本质就是一种数据安全的约束。

  • float(4,2)的范围是:-99.99~99.99,小数会自动四舍五入,大小越界报错。
  • float(4,2) usigned范围是:0~99.99,正数表示范围不变。
  • float小数默认显示2位,整数超过9999990只能存到9999990。
  • float小数设置超过7位存在精度损失,decimal小数精度更高。
  • decimal小数精度最大30位,整体最大65位。D默认为0,M默认为10。

1.2. 字符串

  • varchar最大65535个字节,头3字节存储长度,故utf8编码varchar最大存储21844个字符。当然MySQL限制一行元素大小之和最大65535个字节。

  • char类型始终占用L个字符的大小,varchar类型的占用和数据长度相关。

  • 数据长度不变就用char,长度变化就用varchar;

  • 定长浪费空间但效率高,变长节省空间但效率低。

1.3. enum和set

enum:

enum ('选项1', '选项2', '选项3', ...)

新增时必须插入规定的选项值中的一个。enum类型,实际存储的是从1开始的数字下标。
 
set:

set  ('选项1', '选项2', '选项3', ...)

set类型可以选择多个选项,用逗号隔开,合并成一个字符串。


set存储时采用位图结构。下标的二进制位,从低到高每个比特位表示一个选项,为1表示具有该选项,反之则没有。
 
WHERE:
在这里插入图片描述

where只能筛选出严格匹配的记录,用find_in_set可以筛选出包含该选项的记录。

 

2. 表的约束

MySQL为保证数据的完整性一致性,给我们提供了如下各种强约束。

2.1 空属性

MySQL中的NULL表示不存在、为空。列默认可以为空,not null表示不许为空。

create table stu (
    name varchar(16) not null
);

2.2 默认值

通过default设置列的默认值,可以避免该字段为空。

create table genders (
    gender char(1) default '男'
);

2.3 列描述

comment就是注释。

create table genders (
    gender char(1) comment '性别'
);

2.4 零填充

建表时MySQL自动为int字段添加(10)。设置zerofill的列,如果数据宽度低于指定位数,显示时会在前面补零,不影响存储。

alter table tb modify a(3) int unsigned zerofill;
select * from tbs;
+-----+
| a   |
+-----+
| 001 |
| 011 |
| 111 |
+-----+

2.5 主键

数据库要求表中有一个字段作为一行记录的唯一标识,就是主键。

类似于序号,根据主键能够唯一筛选出一条记录。主键字段不可为空不可重复,一张表只能有一个主键。

create table tb (
    id int primary key
);

删除主键

alter table `tb_name` drop primary key; # 只是为字段去掉主键约束,并不是删除整列。

追加主键

alter table `tb_name` add primary key(`field_name`); # 为已存在字段追加主键,如果有重复值,会追加失败。

复合主键

复合主键可以让多列合起来作为主键。这样只需要保证多列不同时重复就行。

create table `tb_name` (
	`field1` type,
    `field2` type,
    primary key (`field1`, `field2`, ...) # 设置复合主键
);

2.6 自增长

设置auto_increment的字段,插入时可以不给值,新记录的会自动取值为当前最大值加1。一般自增长的字段都是主键。

create table tb (
    id int primary key auto_increment
) auto_increment=100;
  • 自增长字段默认从1开始,也可以插入数据,只要不重复即可。之后会从最大值开始递增。
  • 被自增长的字段必须作为主键或者其他具有唯一性的键使用。

2.7 唯一键

如果存在多个字段需要保证唯一性,但主键只有一个,所以只能用唯一键约束。

create table stu (
	id1 int primary key,
	id2 int unique
);
  • 唯一键允许为空,NULL表示不参与运算。如果将唯一键设置为not null则自动转换成主键。
  • 主键因索引而唯一,唯一键因业务而唯一。
  • 主键只能有一个,唯一键能设置多个。

主键和唯一键并不冲突,只是负责数据在不同层面的唯一性。

2.8 外键

外键用来将从表和主表之间建立关系。外键定义在从表上,一般外键就对应着主表的主键或者唯一键。

create table tb (
	foreign key (`field`) references `tb_master`(`field`)
)

通过外键产生关系的表,除了在逻辑上有关联,MySQL也会维护该逻辑对用户操作产生约束。

比如班级表中得先有id为30的班级,才能在学生表中添加class_id为30的学生。

要删除班级表中id为20的班级,首先必须保证学生表中没有对应班级的学生。

对于数据库用户来说,外键是为了方便业务关联,对于MySQL来说,外键是为了产生对应的外键约束,保证数据的安全。

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

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

相关文章

vue echarts画多柱状图+多折线图

<!--多柱状图折线图--> <div class"echarts-box" id"multiBarPlusLine"></div>import * as echarts from echarts;mounted() {this.getMultiBarPlusLine() },getMultiBarPlusLine() {const container document.getElementById(multiBar…

MathType软件下载2024最新版_MathType官方免费下载附加详细安装步骤

MathType(数学公式编辑器)是由Design Science公司研发的一款专业的数学公式编辑工具。MathType功能非常强大&#xff0c;尤其适用于专门研究数学领域的人群使用。使用MathType让你在输入数学公式的时候能够更加的得心应手&#xff0c;各种复杂的运算符号也不在话下。 安 装 包 …

氢气传感器:呼吸疾病的隐形向导

​ ​​在医学领域&#xff0c;每一次技术革新都可能成为疾病诊断与治疗的新曙光。氢气传感器&#xff0c;这一看似不起眼的装置&#xff0c;正逐渐成为辅助诊断呼吸系统疾病的关键工具。它如同一位精准的侦探&#xff0c;穿梭于呼吸的微风中&#xff0c;捕捉着那些可能预示…

sheng的学习笔记-AI-集成学习(adaboost,bagging,随机森林)

ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录​​​​​​​ 集成学习 什么是集成学习 集成学习一般结构&#xff1a; 示意图 弱学习器 经典算法 Boosting 什么是boosting 方法图 AdaBoost 算法 AdaBoost示意图 流程解析&#xff1a; 错误分类率error…

「Qt Widget中文示例指南」如何实现一个滑动条(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 滑动条示例展示了如…

618在即!「企业商城」作战攻略曝光,解锁电商化采购新模式

“618”购物狂欢大促即将到来&#xff0c;凡是大促&#xff0c;必为商机。 当前&#xff0c;618正在成为拉动品牌销量增长的重要战役&#xff0c;这已经是很多商家的共识。 网上商城交易采购组织形式公开透明、成本低、效率高的优势凸显&#xff0c;逐渐成为各企业采购的主流模…

苹果电脑压缩视频的软件,苹果电脑怎么压缩视频文件大小

在数字时代的浪潮中&#xff0c;视频已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;视频文件的大小也在不断攀升&#xff0c;给存储和传输带来了不小的挑战。因此&#xff0c;视频压缩技术应运而生&#xff0c;成为解决这一问题的关键。本文将详细介绍视频压缩…

Java17 --- redis7缓存双写一致性

一、缓存双写一致性 如果redis中有数据&#xff1a;需要和数据库中的值相同。如果redis中没有数据&#xff1a;数据库中的值要是最新值&#xff0c;且准备回写redis。只读缓存。读写缓存&#xff1a;①、同步直写策略&#xff1a;写数据库后也同步写redis缓存&#xff0c;缓存…

ChatGPT的问题与回复的内容导出(Chorme)

我给出两种方式&#xff0c;第一种方式无使用要求&#xff0c;第二种方式必须安装Chorme 个人更推荐第二种方式 第一种方式&#xff1a;使用chatgpt自带的数据导出 缺点&#xff1a;会将当前未归档的所有聊天记录导出&#xff0c;发送到你的电子邮箱中 第二种方式&#xff1a…

C语言 | Leetcode C语言题解之第155题最小栈

题目&#xff1a; 题解&#xff1a; //单调栈 单调递减 typedef struct {//正常 stackint stack[10000];int stackTop;//辅助 stackint minStack[10000];int minStackTop; } MinStack;MinStack* minStackCreate() {MinStack* newStack (MinStack *) malloc(sizeof(MinS…

【Git】多人协作 -- 详解

一、多人协作&#xff08;1&#xff09; ⽬前&#xff0c;我们所完成的工作如下&#xff1a; 基本完成 Git 的所有本地库的相关操作&#xff0c;git 基本操作&#xff0c;分支理解&#xff0c;版本回退&#xff0c;冲突解决等等。 申请码云账号&#xff0c;将远端信息 clone…

C++通过VS2022使用Conan2.0安装fmt库实现控制台彩色打印

Conan是一个开源的C/C包管理器&#xff0c;用于管理和构建C/C项目的依赖关系。它允许开发人员轻松地集成第三方库、工具和资源到他们的项目中&#xff0c;并管理这些依赖项的版本、构建选项和配置。 Conan官方提供了对应的VS2022扩展插件&#xff0c;通过这个插件再搭配VS2022…

路由控制和策略路由

文章目录 一、路由控制&#xff08;1&#xff09;、前言1.1.1-路由策略 &#xff08;2&#xff09;、正反掩码和通配符1.2.1-通配符 &#xff08;3&#xff09;、ACL1.3.1-ACL步长1.3.2-步长的作用1.3.3-TCP/UDP端口号 实验1:实验2: 二、前缀列表实验1:2.1.1-前缀列表的表达式2…

一平台一张图,撑起危化生产“安全伞”

安全生产是永恒的主题&#xff0c;是一切工作的基础。 风险辨识不到位、特种作业不合规、隐患治理不彻底、应急能力不匹配……如何从消除事故隐患、从根本上解决问题&#xff1f;随着新一代信息技术和安全生产的深度融合&#xff0c;安全生产的管理方式也在发生深刻变化。 提前…

SQL Server入门-SSMS简单使用(2008R2版)-1

环境&#xff1a; win10&#xff0c;SQL Server 2008 R2 参考&#xff1a; SQL Server 新建数据库 - 菜鸟教程 https://www.cainiaoya.com/sqlserver/sql-server-create-db.html 第 2 课&#xff1a;编写 Transact-SQL | Microsoft Learn https://learn.microsoft.com/zh-cn/…

百数私有化本地部署技术解析,附带独家优惠政策

数据驱动的时代&#xff0c;数据安全性对于每个企业来说都至关重要。私有化本地部署作为一种高效的数据管理方式&#xff0c;越来越受到企业的青睐。然而&#xff0c;高昂的部署费用常常让企业望而却步。 作为一家深耕办公领域10年的低代码公司&#xff0c;百数以本地化部署起…

监控局域网电脑屏幕的办法,最简单的三种方法,好用!

在现代企业管理和家庭教育环境中&#xff0c;对局域网内电脑屏幕进行有效监控成为了保障信息安全、提升工作效率和监督行为规范的重要手段。 监控局域网电脑屏幕不仅可以帮助管理者了解员工的工作状态&#xff0c;确保资源的合理使用&#xff0c;还能在一定程度上预防潜在的网…

AI绘画Stable Diffusion 挽救渣图的神器—Loopback Scaler脚本,你值得拥有!

大家好&#xff0c;我是向阳 今天这篇文章就是围绕着开局的这两张原图开始的。 在Stable diffusion甚至当前所有的AI画图工具里面&#xff0c;AI生成内容随机性都是一个很大的问题。 我们经常遇到一张图构图不错但是脸崩了&#xff0c;又或者人物形象不错但是背景画得崩了这…

海南云亿商务咨询有限公司抖店开店怎么样?

在数字化浪潮席卷全球的今天&#xff0c;电商行业日新月异&#xff0c;其中抖音电商以其独特的短视频直播模式&#xff0c;迅速崛起成为电商领域的新贵。海南云亿商务咨询有限公司&#xff0c;作为抖音电商服务的佼佼者&#xff0c;凭借专业的团队和丰富的经验&#xff0c;致力…

人体关键点检测-基于Gradio完成应用开发

前言 本次分享将带领大家从 0 到 1 完成一个人体姿态估计任务&#xff0c;覆盖数据准备、模型训练、推理部署和应用开发的全流程&#xff0c;项目将采用以PaddlePaddle为核心的飞桨深度学习框架进行开发&#xff0c;并总结开发过程中踩过的一些坑&#xff0c;希望能为有类似项…