在这里插入图片描述

我不假思索地上路,
因为出发的感觉太好了,
世界突然充满了可能性。
--- 杰克·凯鲁亚克 ---

从零开始了解数据库开发

  • MySQL中的数据类型
  • 数字类型
  • 字符串类型
  • 日期类型

MySQL中的数据类型

MySQL数据库汇中,每一条数据都有其类型,主要分为三类:数字类型,字符串类型,日期时间类型。下面我们依次来介绍

数字类型

类型分类数据类型描述
数字类型INT整数类型,用于存储整数。 有符号 -231 ~ 231-1
数字类型TINYINT小整数类型,用于存储非常小的整数。有符号 -128 ~ 127
数字类型SMALLINT小整数类型,用于存储较小的整数。 有符号 -215 ~ 215-1
数字类型MEDIUMINT中等大小整数类型,用于存储中等大小的整数。
数字类型BIGINT大整数类型,用于存储大整数。 有符号 -263 ~ 263-1
数字类型FLOAT[(M , D)]单精度浮点数类型,用于存储单精度浮点数。 M指定长度,D指定小数位数
数字类型DOUBLE [(M , D)]双精度浮点数类型,用于存储双精度浮点数。
数字类型DECIMAL [(M , D)]定点数类型,用于存储精确的小数。
数字类型BIT(M)位类型。M指定位数,默认值1 ,范围1-64

数字类型分为了整型,浮点型,位类型。创建表时可以选择合适的数据类型进行储存

我们先来看整型:我们创建这样一个表在这里插入图片描述
我们插入一下age这个数据:在这里插入图片描述
可以看到对于tinyint类型,超出其范围的数据是不能被插入到数据表中的。如果是unsigned tinyint类型呢
在这里插入图片描述
对于无符号的,返回就是0~255,超出范围的数据就不能被储存。对于其他整型类型也是一样的。
在这里插入图片描述
这个对于非法数据插入时的保持拦截是mysql的一个重要特性,在c/c++中,出现这种超出范围的存储char c = 123546,编译器不一定会报错,可能会优化进行截断,c储存的值就不是我们赋予的值。如果数据库也这么处理,那么数据库中的数据将变得不可信!所以这种拦截可以保证插入到数据库中的数据一定是合法的!所以:数据类型本身也是一种约束

注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型 但是也一定要注意使用合适的类型,对于数据库庞大的数据,每一个都浪费一点,那么会造成很大的资源浪费!

再来看字节类型BIT(M),我们创建一个表:在这里插入图片描述
在这里插入图片描述
可以看到超出1位的数值不能被插入。

最后来看浮点数:
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

创建一张这个表
在这里插入图片描述
我们插入几行数据在这里插入图片描述
通过这个插入可以发现,对于整数部分超出M-d位的是不能被存储的,如果小数部分超出,则会进行四舍五入保值。注意四舍五入后如果超出范围,也会被拦截。对于浮点型的无符号类型,是对储存类型直接去掉负数,储存的上限不会变。

当把数据类型改为float时,如果数值超出其储存范围,会出现损失精度的现象:
在这里插入图片描述
对于float无法储存的数据,这里建议使用decimal。
在这里插入图片描述
我们建立一个这样的表,插入同样的数据:

在这里插入图片描述
decimal的精度显然更高!

decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。
建议:如果希望小数的精度高,推荐使用decimal。

字符串类型

类型分类数据类型描述
字符串类型VARCHAR变长字符串类型,用于存储可变长度的字符串。 最多只能是65535
字符串类型CHAR定长字符串类型,用于存储固定长度的字符串。 最多只能是255
字符串类型TEXT文本类型,用于存储长文本。
字符串类型TINYTEXT微型文本类型,用于存储非常短的文本。
字符串类型MEDIUMTEXT中等长度文本类型,用于存储中等长度的文本。
字符串类型LONGTEXT长文本类型,用于存储非常长的文本。
字符串类型BLOB二进制大对象类型,用于存储二进制数据。
字符串类型TINYBLOB微型二进制大对象类型,用于存储非常小的二进制数据。
字符串类型MEDIUMBLOB中等长度二进制大对象类型,用于存储中等长度的二进制数据。
字符串类型LONGBLOB长二进制大对象类型,用于存储非常长的二进制数据。
字符串类型ENUM枚举类型,用于存储枚举值,即一组预定义的字符串。
字符串类型SET集合类型,用于存储一组预定义的字符串,可以包含多个值。

字符串类型最典型的就是 char与varchar。我们先来看char,这是一个固定长度的字符串,我们的插入必须是小于等于其长度。
在这里插入图片描述
这里发现汉字和英语字母都是最大插入三个,但是utf8编码中汉字是占3个字节,所以:mysql中的字符与c/c++中不同 ,字符可以是字母或汉字。c/C++中字符就是一个字节,mysql不是!

再来看varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节。
在这里插入图片描述
这里性质与char一致,大于其长度的无法插入。
再来看这样一个现象,当我们想要修改varchar的储存长度为65535时,会出现一个报错:
在这里插入图片描述
提升我们不能扩展到65535,而只能到16383。这里是因为根据字符集的规定,中文字符可能会使用不同的字节数:

  • 如果你使用的是utf8mb4字符集(MySQL推荐使用的完整UTF-8编码),每个中文字符确实占用4个字节
  • 如果是utf8字符集,每个中文字符占用3个字节
  • 如果是latin1字符集,每个中文字符可能无法正常存储

所以对于utf8mb4字符集字符集65535个字节最多只能储存16383个中文字符!

varchar(len)与编码密切相关!varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532

在这里插入图片描述
如果储存的长度过长,建议使用大文本储存。

如何选择定长或变长字符串?

  1. 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  2. 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
  3. 定长的磁盘空间比较浪费,但是效率高。
  4. 变长的磁盘空间比较节省,但是效率低。
  5. 定长的意义是,直接开辟好对应的空间
  6. 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少
  7. 两者的关系与 c/c++中的 char[ ] 与 string 很相似

日期类型

类型分类数据类型描述
日期类型DATE日期类型,用于存储日期值(年-月-日)。
日期类型TIME时间类型,用于存储时间值(时:分:秒)。
日期类型DATETIME日期时间类型,用于存储日期和时间值(年-月-日 时:分:秒)。
日期类型TIMESTAMP时间戳类型,用于存储时间戳值,表示自1970-01-01 00:00:00 UTC以来的秒数。

常用的日期有如下三个:

  1. date :日期 ‘yyyy-mm-dd’ ,占用三字节。记录需要储存的时间日期
  2. datetime :时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节。记录需要储存的时间日期
  3. timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节。一个表中可以有多个TIMESTAMP字段,但只有一个可以设置为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。这个是记录数据的创建/修改时间。

在这里插入图片描述

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

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

相关文章

mybatis vs mybatis-plus

​​核心关系:​​ MyBatis-Plus ​​不是​​ MyBatis 的替代品,而是构建在 MyBatis ​​之上​​的一个强大的​​增强工具包​​。它完全兼容原生 MyBatis,并在其基础上提供了大量开箱即用的功能,极大地简化了开发,…

2025胶水分装机服务商技术解析:聚焦高精度、智能化应用

胶水作为电子组装、新能源电池、医疗器械、消费类电子产品等关键环节中的核心材料,其生产、储存与分装过程对精度、洁净度和一致性的要求日益严苛。在这一背景下,胶水分装机及分装服务商正从传统的设备供应商向“工艺装备数据服务”的综合解决方案提供者…

v-model是怎么实现的,语法糖到底是什么

1&#xff1a;作用在表单元素上实际上就是2&#xff1a;作用在自定义组件上&#xff0c;vue2和vue3不同 vue2&#xff1a; v-model相当于名为value 的 prop和名为 input 的事件 在父组件中 <child v-model"message"></child> //相当于&#xff1a; <…

学习笔记:Javascript(5)——事件监听(用户交互)

事件监听&#xff1a;用户交互的核心机制在前端开发中&#xff0c;事件监听是处理用户交互的基础机制。它允许我们检测用户的操作&#xff08;如点击、输入、滚动等&#xff09;并执行相应的代码&#xff0c;让网页从静态变为动态。一、事件与事件监听的基本概念事件&#xff0…

在Linux系统中清理大文件的方法

在Linux系统的日常运维管理过程中&#xff0c;磁盘空间问题是一个非常常见且棘手的难题。随着系统运行时间的增加&#xff0c;日志文件、临时文件、缓存文件以及用户产生的数据会不断增长。如果缺乏及时的监控和清理&#xff0c;大文件往往会迅速占满磁盘&#xff0c;导致系统性…

使用x64dbg分析调试windows可执行程序

引言 当我们仅有一个C/C等编译的可执行程序&#xff08;windows 上的 exe 文件&#xff09;&#xff0c;而没有源码时我们应该怎么分析调试该可执行程序呢&#xff1f;我们可以通过动态分析或静态分析的方式达成我们的目的&#xff0c;当然比较有效的方案当然是静态分析结合动态…

在Windows 11上配置Cursor IDE进行Java开发

前言 Cursor IDE是一款基于VSCode的AI编程助手&#xff0c;集成了强大的AI功能&#xff0c;能够显著提升Java开发效率。本文详细介绍如何在Windows 11系统上安装和配置Cursor IDE&#xff0c;使其成为高效的Java开发环境。 1. Windows 11上安装Cursor IDE 1.1 下载和安装步骤…

字符串-43.字符串相乘-力扣(LeetCode)

一、题目解析 1、计算乘积后&#xff0c;将结果也按字符串返回 2、字符串长度在[1&#xff0c;200] 二、算法原理 为了方便字符串计算&#xff0c;我们将其逆置&#xff0c;符合我们的计算需求&#xff0c;"123"将变为"321" 解法1&#xff1a;模拟小学…

鸿蒙HAP包解包、打包、签名及加固全流程解析

在鸿蒙应用开发过程中&#xff0c;HAP&#xff08;HarmonyOS Ability Package&#xff09;包的解包、打包、签名以及加固是开发者们绕不开的重要环节。今天&#xff0c;就让我们深入探讨这一全流程&#xff0c;帮助大家更好地理解和掌握相关操作。 一、HAP解包 解包是分析和修…

PyTorch之张量创建与运算

PyTorch 主要有以下几个基础概念&#xff1a;张量&#xff08;Tensor&#xff09;、自动求导&#xff08;Autograd&#xff09;、神经网络模块&#xff08;nn.Module&#xff09;、优化器&#xff08;optim&#xff09;等。张量&#xff08;Tensor&#xff09;&#xff1a;PyTo…

数据 储存

文件储存 网页版爬虫数据库 &#xff1a; https://spidertools.cn/#/crypto TEXT 文本储存 可以使用记事本打开 r #读取。 r #读写&#xff0c;文件指针放在文件的开头。 w #写入&#xff0c;覆盖原文件。 w #读写&#xff0c;覆盖原文件。 a #附加。 a #读写&…

Flask 博客系统(Flask Blog System)

目标&#xff1a;零基础也能从头搭建一个支持文章管理、评论、分类标签、搜索、用户登录的博客系统 技术栈&#xff1a;Flask SQLite SQLAlchemy Jinja2 HTML/CSS Flask-Login 开发工具&#xff1a;VSCode 学习重点&#xff1a;MVC 模式、数据库操作、会话管理、表单处理一…

基于RFID技术的宠物自动喂食器方案

一、背景 宠物已经成为现代人生活中不可或缺的一部分&#xff0c;随着养宠物的人越来越多&#xff0c;宠物的数量也越来越多&#xff0c;有些家庭甚至养了两只以上的猫狗或者猫狗混养&#xff0c;宠物间的管理问题也越来越突出&#xff0c;如宠物之间的抢食行为&#xff0c;易…

conda常见问题

文章目录run "conda init" before "conda activate"打开PowerShell自动进入base环境&#xff08;cmd没有这个问题&#xff09;run “conda init” before “conda activate” 在使用conda命令创建env后使用conda activate命令&#xff0c;出现"run ‘…

第5章 HTTPS与安全配置

5.1 HTTPS概述 5.1.1 为什么需要HTTPS 数据加密:保护传输中的敏感数据 身份验证:确认服务器身份的真实性 数据完整性:防止数据在传输过程中被篡改 SEO优势:搜索引擎优先排名HTTPS网站 浏览器要求:现代浏览器对HTTP网站显示不安全警告 合规要求:许多行业标准要求使用HTTP…

Java入门级教程17——利用Java SPI机制制作验证码、利用Java RMI机制实现分布式登录验证系统

目录 1.制作验证码——java SPI机制 1.1 类所属包情况 1.2 具体实现 1.2.1 核心接口&#xff1a;ICode 1.2.2 接口实现类&#xff1a;验证码的具体生成逻辑 1.2.3 服务工厂类&#xff1a;CodeServiceFactory&#xff08;核心&#xff1a;SPI 服务发现&#xff09; 1.2.…

ES6笔记5

1. Promise相当于一个容器&#xff0c;保存着未来才要结束的事件&#xff08;异步操作&#xff09;的一个结果&#xff0c;各种异步操作都可以用同样方法处理 axios特点&#xff1a;对象的状态不受外界影响&#xff0c;处理异步操作&#xff0c;3个状态&#xff0c;Pending&…

解决idea2021maven依赖导入后还是找不到包,爆红无法导入

1.依赖导入后pom.xml文件以及Maven,此两处代码还是爆红 2.解决方法 由技术大佬同事几分钟解决,他记忆深刻之前搞过很久,一看就知道哪里出问题了 我之前是配过Maven的本地仓库的但是没有用,这次出问题之后长教训了,技术大佬说尽量用自己的本地仓库,不要用idea的Maven仓库,容易…

【硬件-笔试面试题-81】硬件/电子工程师,笔试面试题(知识点:详细讲讲同步时钟与异步时钟通信)

题目汇总版--链接&#xff1a; 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题汇总版&#xff0c;持续更新学习&#xff0c;加油&#xff01;&#xff01;&#xff01;-CSDN博客 【硬件-笔试面试题-81】硬件/电子工程师&#xff0c;笔试面试题&#xff08;知识点…

php计算一个模拟增长过程函数

private function calculateGrowth($progress) {// 使用多个增长阶段模拟不均匀性if ($progress < 0.3) {// 前30%时间&#xff1a;缓慢增长 30 %return pow($progress / 0.3, 0.7) * 0.3;} elseif ($progress < 0.7) {// 中间40%时间&#xff1a;快速增长 50%return 0.3…