mysql 问题解答
01 Mysql有哪些数据类型
MySQL支持多种数据类型,这些类型可以分为几个大的类别:数值类型、日期和时间类型、字符串(字符和字节)类型、空间类型、JSON类型。下面是每种类型的简要说明和用途,以及示例。
数值类型
-
整型:
TINYINT:非常小的整数,如性别标识(0代表女性,1代表男性)。SMALLINT:小型整数,如年龄字段。MEDIUMINT:中型整数,可能用于存储社区内的用户数量。INT或INTEGER:标准整数,适用于存储更大范围的数值,如用户ID。BIGINT:更大范围的整数,例如存储社交媒体平台的全球用户ID。
每种整型都有相应的
UNSIGNED属性,可以存储更大的正数值。 -
浮点型和定点型:
FLOAT:单精度浮点数,如存储商品的价格。DOUBLE:双精度浮点数,如存储科学数据或精确计算。DECIMAL或NUMERIC:用于存储精确的小数,常用于财务计算,例如账户余额。
日期和时间类型
DATE:包含日期值的列(年月日),例如存储用户的生日。TIME:包含时间值(时分秒),例如记录事件的持续时间。DATETIME:包含日期和时间值,用于记录文章发布的具体时间。TIMESTAMP:包含日期和时间值,通常用于记录数据行的创建和修改时间。YEAR:年份值,比如表示汽车的制造年份。
字符串类型
-
字符型:
CHAR:定长字符串,如存储车牌号。VARCHAR:变长字符串,适用于存储长度不固定的文本,如用户姓名。
-
文本型:
TINYTEXT:非常短的文本,如注释。TEXT:标准的文本数据,如博客文章。MEDIUMTEXT:中等长度的文本,如较长的文章。LONGTEXT:极长文本数据,适用于存储大型文本,如书籍内容。
-
二进制型:
BINARY、VARBINARY:类似于CHAR和VARCHAR,但是用于二进制字符串。TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB:用于存储二进制数据,如图片或文件。
空间类型
GEOMETRY、POINT、LINESTRING、POLYGON等:这些类型用于存储地理空间数据,例如在地图应用中标示位置或区域。
JSON类型
JSON:用于存储JSON(JavaScript Object Notation)文档。在需要存储非结构化数据或复杂数据结构的应用中非常有用,例如存储配置参数或临时数据。
示例应用场景
假设你正在开发一个电子商务平台,你可能需要以下数据类型:
- 商品ID:
INT或BIGINT(如果预计商品数量非常大)。 - 商品价格:
DECIMAL(用于保证价格的精确度)。 - 用户名:
VARCHAR(因为用户名长度可能不同)。 - 用户密码:
VARCHAR(通常存储密码的散列值)。 - 商品描述:
TEXT(因为描述的长度可能超出VARCHAR的限制)。 - 用户注册时间:
DATETIME(记录日期和时间)。 - 商品图片:
BLOB或直接存储图片的URL(如果图片以文件形式存储在数据库中)。 - 用户地理位置:
POINT(如果需要存储用户的精确位置)。 - 用户配置:
JSON(可以灵活地存储用户的配置设置)。
在设计数据库时,选择合适的数据类型对于优化性能、空间利用和数据完整性至关重要。正确的数据类型不仅可以减少存储空间的浪费,还可以加快查询速度,确保数据的准确性。
04 CHAR,VARCHAR 和 Text 的区别?
text用于存储文章,博客等任何可能超过VARCHAR限制的文本。
在MySQL中,TEXT类型的列不能指定默认值。这是因为TEXT类型是用来存储大段文本的,它们通常是不定长的,可以存储非常长的字符串,而MySQL不允许给这种类型的列指定默认值。
此外,TEXT类型的数据通常被存储在表的数据页之外。这意味着当数据库存储和检索这种类型的数据时,可能需要更多的磁盘I/O操作,因为它必须跨越不同的位置。这种存储方式与CHAR和VARCHAR类型相比,可能会使得处理速度较慢。
下面是一个简单的例子来解释这一点:
假设你有一个博客系统,每篇博客的内容可能包括大量文本。你可以为博客内容创建一个TEXT类型的列。
CREATE TABLE blog_posts (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255),content TEXT,published_date DATETIME
);
在这个blog_posts表中,content列被定义为TEXT类型,因为博客文章可能非常长,超过了VARCHAR类型的最大长度限制。
现在,如果你想为content列设置一个默认值(比如一个空字符串),这样的操作是不被允许的:
ALTER TABLE blog_posts ALTER COLUMN content SET DEFAULT '';
执行这条语句会导致错误,因为TEXT类型的列不支持默认值。
当你要查询表中的博客文章时:
SELECT * FROM blog_posts WHERE id = 1;
MySQL首先从表的主数据页中读取行的基本信息,如果content列的数据存储在表外,MySQL还需要做额外的I/O操作去检索这部分文本数据,这可能比直接从表内读取数据慢。
这种表外存储通常适用于TEXT和BLOB类型的数据,因为它们的长度可能会非常长,如果存储在表内可能会造成表的数据页过大,影响其他列的检索性能。通过这种方式,MySQL可以更有效地管理内存和存储空间,尽管可能会牺牲一些性能。
表外存储
“表外存储”(也被称作"溢出"或"外部存储")的概念,是指数据实际上并不存储在数据库的主数据文件中的同一个数据页(或行)上。在MySQL中,尽管所有数据都存储在MySQL服务器管理的文件系统中,某些类型的数据可能不会直接存储在表的主数据结构中。
在MySQL中,一个表通常由一系列的数据页组成,每页大小默认为16KB。对于大部分的数据类型,如INT、CHAR、VARCHAR,其数据是直接存储在数据页内部的。这意味着数据与表的其他部分紧密排列在一起,可以通过单个磁盘I/O操作读取。
然而,对于TEXT和BLOB这样的大型数据类型,如果文本或二进制数据非常大,这些数据可能不会完全存储在同一个数据页中,特别是当它们超过页大小时。MySQL会将数据的一个部分或全部存储在表的主结构之外的地方,仅仅在数据页中保留一个指针来引用这些数据。当需要查询这些数据时,MySQL首先读取数据页以获取指针,然后通过指针去读取实际存储的数据,这就需要额外的磁盘I/O操作。
这种设计允许MySQL更有效地处理大量的大型数据对象,因为这些大对象如果存储在表内,会极大地增加表的大小,导致常规查询的性能下降。通过将它们存储在表外,MySQL能够维持数据页的紧凑性和效率,同时仍能处理大型数据。
虽然从逻辑上看,这些数据仍然是表的一部分,但从物理存储的角度来看,它们是分开存储的,而且可能分散在不同的磁盘位置。这就是所谓的"表外存储"。
05 什么是三大范式?
数据库设计的"三大范式"是指三个基本的规则,用来指导数据库表结构的设计,以减少数据的冗余和改善数据的逻辑结构。遵循这些范式可以帮助设计出既节省空间又能提高效率的数据库。
第一范式(1NF):列的原子性
规则:表的每一列都是不可分割的原子数据项,同一列中的所有数据项都是相同类型的单一数据。
解释:每个字段都应该是最小的数据单位,不可以再分割。例如,你不应该在一个字段中存储多个电话号码,而是应该为每个电话号码提供单独的字段。
例子:
不符合1NF的表结构:
| 客户ID | 客户名称 | 订单 |
|--------|----------|------------|
| 1 | 张三 | 订单1, 订单2 |
| 2 | 李四 | 订单3 |
在上面的表中,订单列包含了多个订单号,不满足1NF的要求。
符合1NF的表结构:
| 客户ID | 客户名称 | 订单 |
|--------|----------|-------|
| 1 | 张三 | 订单1 |
| 1 | 张三 | 订单2 |
| 2 | 李四 | 订单3 |
在这个修改后的表中,每个订单都有自己的行,满足了1NF。
第二范式(2NF):消除部分依赖
规则:在1NF的基础上,表必须有一个主键,并且非主键字段必须完全依赖于主键,而不是依赖于主键的一部分(只适用于组合主键)。
解释:如果一个表有一个组合主键,那么表中的其他数据应该与整个主键有关系,而不是仅与主键的一部分有关系。
例子:
不符合2NF的表结构:
| 学生ID | 课程ID | 学生姓名 | 课程名称 |
|--------|--------|----------|-----------|
| 1 | 101 | 张三 | 数学 |
| 1 | 102 | 张三 | 物理 |
| 2 | 101 | 李四 | 数学 |
在这个表中,学生姓名只依赖于学生ID,而课程名称只依赖于课程ID。这违反了2NF。
符合2NF的表结构:
学生表:
相关文章:
mysql 问题解答
01 Mysql有哪些数据类型 MySQL支持多种数据类型,这些类型可以分为几个大的类别:数值类型、日期和时间类型、字符串(字符和字节)类型、空间类型、JSON类型。下面是每种类型的简要说明和用途,以及示例。 数值类型 整型: TINYINT:非常小的整数,如性别标识(0代表女性,1代…...
组件与Props:React中构建可复用UI的基石
目录 组件:构建现代UI的基本单位 Props:组件之间的数据传递 Props的灵活性:构建可配置的组件 组件间的通信:通过回调函数传递数据 总结: 组件:构建现代UI的基本单位 组件是前端开发中的关键概念之一。…...
接口框架第二篇—unittest/pytest 有什么区别
1.用例编写方法 unittest 1)测试文件必须导入unittest包 2)测试类必须继承unittest.TestCase 3)测试类必须有unittest.main()方法 4)测试方法必须要以test_打头 pytest 1)测试文件名要以test_打头,或…...
Window 7 / 10 / 11 .bat .cmd 中文路径不识别解决方案
一般都是编码问题 我们在批处理的第一行加入: chcp 65001 进行转为UTF-8 编码就可以实现中文路径识别...
Linux命令(113)之rev
linux命令之rev 1.rev介绍 linux命令rev是将文件中的每行内容已字符为单位反向输出,即第一个字符最后输出,最后一个字符最先输出 2.rev用法 rev [参数] filename rev参数 参数说明-V显示版本信息-h显示帮助信息 3.实例 3.1.显示rev的版本信息 命令…...
QT+SQLite数据库配置和使用
一、简介 1.1 SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。 二、下载和配置 2.1 SQLite下载…...
若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源
目录 一、若依平台配置 二、编写oracle数据库访问的各类文件 三. 一个方法操作多个数据源 一、若依平台配置 1、在ruoyi-admin的pom.xml添加依赖 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version…...
Seata入门系列【19】分布式事务之CAP、BASE理论
1 CAP理论 CAP是以下三个词语的缩写: Consistency:一致性Availability:可用性Partition tolerance:分区容忍性 CAP理论的基础概念就是在分布式系统中,无法同时满足以上三点。 下面我们以一个简单的分布式系统&…...
界面控件DevExpress WPF Gauge组件 - 轻松实现个性化商业仪表盘
DevExpress WPF Gauge(仪表)控件包含了多种圆形仪表类型、水平和垂直线性仪表、分段和矩阵数字仪表以及状态指示器,同时还具有最终用户交互性的集成支持。 P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至…...
算法题:870. 优势洗牌
该算法是临时想出来的,Java代码的实现在时间上不占优,之后有时间要优化一下,目前就是给大家提供一下思路。 解题思路:田忌赛马的思想 贪心法。 Step1. 对两个数组进行排序。 Step2. 同时遍历排序后的nums2和nums1,将…...
[架构之路-252/创业之路-83]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业应用信息系统集成
目录 第一章 什么是企业应用信息系统集成What 1.1 简介 1.2 架构 二、为什么需要企业应用信息系统集成Why 三、如何实现企业应用信息系统集成 3.1 步骤 3.2 企业应用集成的层次 3.3 业务流程重组 第一章 什么是企业应用信息系统集成What 1.1 简介 企业应用信息系统集…...
MFC发送http https以及json解析
域名解析成IP char szWeb[128] "www.baidu.com";struct hostent *pHost NULL;pHost gethostbyname(szWeb);//完成主机名到域名的解析char *IP inet_ntoa(*((struct in_addr *)pHost->h_addr));CString ipStr IP;请求三部曲: 1、CInternetSession…...
UE5加载websocket模块为空
今天测试UE 发现工程启动不了,后来看到原来是websocket模块无法加载。 解决的它的方法很简单,这种问题一般会出现在源码版本的引擎或者是停电了,导致UElaunch版本损坏,解决方法是来到源码版本的引擎 这个目录下: D:\…...
学习 Python 数据可视化,如何快速入门?
Python 是一种非常流行的编程语言,具有简单易学、高效、丰富的库和工具等特点。其中,数据可视化是 Python 的一个重要应用领域,可以帮助人们更好地理解和分析数据。本文将介绍如何快速入门 Python 数据可视化,以及常用的可视化工具…...
XUbuntu22.04之simplenote支持的Markdown语法总结(一百九十一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
JAVA深化篇_26——Apache commons-io工具包的使用
Apache commons-io工具包的使用 Apache基金会介绍 Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软…...
centos 7 kafka2.6单机安装及动态认证SASL SCRAM配置
目录 1.kfaka安装篇 1.1 安装jdk 1.2安装kafka 2.安全篇 2.1 kafka安全涉及3部份: 2.2 Kafka权限控制认证方式 2.3 SASL/SCRAM-SHA-256 配置实例 2.3.1 创建用户 2.3.2 创建 JAAS 文件及配置 3.测试 3.1 创建测试用户 3.2 配置JAAS 文件 3.2.1 生产者配…...
TrafficWatch 数据包嗅探器工具
TrafficWatch 是一种数据包嗅探器工具,允许您监视和分析 PCAP 文件中的网络流量。它提供了对各种网络协议的深入了解,并可以帮助进行网络故障排除、安全分析等。 针对 ARP、ICMP、TCP、UDP、DNS、DHCP、HTTP、SNMP、LLMNR 和 NetBIOS 的特定于协议的数据…...
MySQL Binlog实战应用之一
一、前言 开发业务系统尤其是与财务相关的系统,需要记录每一笔变更操作的日志,这一般有两种实现方案。 1、代码中通过AOP实现,提供注解跟踪记录日志,这种方案能够比较清晰地以业务角度记录操作日志,但记录变更前的旧…...
【MySQL】MVCC机制(undo log,read view)
文章目录 前言一. 预备知识二. 模拟MVCC三. Read View四. RC与RR的本质区别结束语 前言 MVCC(多版本并发控制)是一种用来解决读-写冲突的无锁并发控制 MVCC为事务分配单向增长的事务ID,为每个修改保存一个版本,版本与事物ID相关联…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
