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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值