当前位置: 首页 > news >正文

SQL:数据类型(Data Types)

目录

数字数据类型(Numeric data types)

非数据类型(Non-numeric data types) 

 日期和时间类型(Date and Time Types)

NULL(缺失或未知值)

当你在数据库中创建表格时,你必须指明表中每一列可以保存的数据类型。数据类型可以分为几类:数字数据类型(Numeric data types),非数据类型(Non-numeric data types),日期和时间类型(Date and Time Types)。

数字数据类型(Numeric data types)

1.INT

定义:整数字段,例如库存数量,自动生成的唯一主键也用INT。 

范围:INT通常范围是-2,147,483,648到2,147,483,647(32位),超了会溢出。 

主键:自动生成的主键(AUTO_INCREMENT)常用INT,保证每个记录有唯一ID。 

使用场景:数量、ID、年龄等需要整数的地方。 

2.FLOAT 

定义:FLOAT(p):近似的小数,p是精度(小数点后位数)。 

近似值:不像精确小数,FLOAT可能有微小误差(比如0.1 + 0.2可能不是0.3),不适合财务计算。 

补充:精度p通常是1到24,超大数用DOUBLE。 

使用场景:科学计算、近似价格(比如3.14美元)。 

3.DECIMAL 

定义:DECIMAL(M, D):精确的小数,M是总位数,D是小数点后位数。比如DECIMAL(5, 2)范围是-999.99到999.99,DECIMAL(4, 3)范围是-9.999到9.999。 

精确性:不像FLOAT,DECIMAL不会出错,适合需要精确计算的场景。 

设置M和D:M包括整数和小数部分,D是小数位数,选大了浪费空间,选小了存不下。 

补充:DECIMAL比FLOAT慢,但精确性高,常用在银行系统。 

使用场景:财务数据、精确价格。 

非数据类型(Non-numeric data types) 

 

1. CHAR 

定义:CHAR(N):固定长度的字符。 

通俗解释:CHAR就像一个固定大小的盒子,无论你放多少东西,盒子大小不变,多余空间会用空格填满。比如CHAR(5),如果你放“hi”(2个字符),后面会自动补3个空格变成“hi ”。 

固定长度:不管你存多少,总是占用N个字符的空间。如果数据太长(超过N),会报错;太短,就浪费空间。 

补充:N通常是1到255之间的数字,具体上限取决于数据库系统。 

使用场景:适合长度固定的数据,比如邮政编码(比如中国邮编是6位)。 

2. VARCHAR 

定义:VARCHAR(N):可变长度的字符。var代表variable(可变的)。

可变长度:只占用实际数据大小的空间,外加一点额外开销(记录长度用的),比CHAR更节省空间。 

最大限制:不能超过N,比如VARCHAR(5)放“helloo”会失败。 

补充:VARCHAR在现代数据库中用得更多,因为它灵活且节省存储。 

使用场景:适合长度不固定的数据,或者长度超过255个字符的数据。比如名字、地址。 

3. ENUM 

定义:ENUM(list of values):枚举类型,只能从预设列表中选择一个值,比如ENUM('xs', 's', 'm', 'l', 'xl')。 

限制选择:如果输入不在列表里(比如填“xx”),会报错或默认取第一个值(取决于数据库设置)。 

补充:列表里的值数量有限(通常255个以内),适合小范围选择。 

使用场景:列表中的值无法改变并且值的选择较少。比如性别(男/女)、状态(已完成/进行中)。 

4. BOOLEAN 

定义:真(True)或假(False)值。 

存储方式:在很多数据库中,BOOLEAN实际用0和1存储(0为False,1为True)。 

补充:有些数据库(如MySQL)把BOOLEAN看作TINYINT(1),但逻辑上就是真假值。 

 日期和时间类型(Date and Time Types)

日期和时间类型是用来存储与时间相关的数据,相当于给数据库里的“事件”贴上时间标签。 

1.DATE 

定义:存储日期,格式通常是YYYY-MM-DD(年-月-日),比如2023-10-15。 

范围:通常从1000-01-01到9999-12-31(具体取决于数据库)。 

只存日期:不能存“几点几分”,如果需要时间,得用其他类型。 

格式:必须是YYYY-MM-DD,乱写(比如10-15-2023)可能会出错。 

例子:CREATE TABLE users (id INT, birth_date DATE); INSERT INTO users VALUES (1, '2000-05-20'); 

2.DATETIME 

定义:存储日期和时间,格式通常是YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒),比如2023-10-15 14:30:00。 

范围:通常从1000-01-01 00:00:00到9999-12-31 23:59:59。 

精度:包括秒,适合精确记录事件时间。 

例子:CREATE TABLE events (id INT, event_time DATETIME); INSERT INTO events VALUES (1, '2023-10-15 14:30:00'); 

3.TIME 

定义:只存储时间,格式是HH:MM:SS.sssss(时:分:秒),比如14:30:00。 (HH代表持续时间)

范围:通常是-838:59:59到838:59:59(支持负时间,适用于时间差)。 

使用场景:事件持续时间、工作时长。 

例子:CREATE TABLE schedules (id INT, duration TIME); INSERT INTO schedules VALUES (1, '02:30:00'); 

4.YEAR 

定义:只存储年份,格式可以是YYYY(4位)或YY(2位),比如2023或23。 

范围:通常是1901到2155(2位格式)或1000到9999(4位格式)。

2位转4位:输入YY时,数据库会自动补全世纪(比如70变成1970),但规则因数据库而异。 

例子:CREATE TABLE cars (id INT, model_year YEAR); INSERT INTO cars VALUES (1, 2023); 

NULL(缺失或未知值)

NULL是数据库中的一个特殊值,表示数据“缺失”或“未知”。理解NULL很重要,因为它跟普通值(如0或空字符串'')完全不同。

1.Missing or Unknown(缺失或未知)

定义:NULL表示某个字段的值不知道或没有定义。 

不是0:0是有意义的数字,NULL是“没值”。

不是空字符串'':''是长度为0的字符串,NULL是连字符串都不是。

 使用场景:未知的年龄、未填的地址。

2.Operators(操作符)

IS NULL 和 IS NOT NULL:

SELECT * FROM users WHERE phone IS NULL; 找出电话号码未知的人。

注意:不能用=或!=判断NULL,比如phone = NULL是错的,必须用IS NULL。

相关文章:

  • 懂x帝二手车数据爬虫-涉及简单的字体加密,爬虫中遇到“口”问题的解决
  • 可发1区的超级创新思路(python 实现):基于时空解耦和对比学习的可解释性模型
  • AI大模型底层技术——结合 Prompt Engineering 的 LoRA
  • 《C++速通秘籍》
  • GD32F407开发环境搭建
  • 基于Android的图书借阅和占座系统(源码+lw+部署文档+讲解),源码可白嫖!
  • C++ 环境设置
  • Linux中查看占用端口号的进程信息的方法
  • ✅ Ultralytics YOLO验证(Val)时自动输出COCO指标(AP):2025最新配置与代码详解 (小白友好 + B站视频)
  • 使用正则 删除代码 注释
  • YOLO11改进-模块-引入可变形交互注意力模块DIA-Module
  • Python高阶函数-eval深入解析
  • 企业级开发SpringBoost玩转Elasticsearch
  • HashMap 如何解决哈希冲突?ConcurrentHashMap 如何保证线程安全?进程和线程有什么区别?多线程有什么优缺点?...
  • 网页常用字符大全
  • 嵌入式行业常见平台交互协议全解析
  • 2025-04-07(DS复习):Databricks DLT 详解
  • 阶段测试 【过程wp】
  • 【PalladiumZ2 使用专栏 1 -- 波形 trigger 抓取详细介绍】
  • I have something to say about Vue Node.js
  • 网站营销seo哪个公司可靠/福建百度seo排名点击软件
  • 网站优化公司方案/免费发帖论坛大全
  • 学校网站建设介绍/互联网营销的方式有哪些
  • 公司做网站/中文搜索引擎有哪些
  • dnf免做卡领取网站/武汉全网营销推广公司
  • 查看自己网站访问量/最近国际时事热点事件