MySQL基础 -----MySQL数据类型

目录

INT类型

tinyint类型

类型大小范围

测试tinyint类型数据

float类型

测试:

测试正常数据范围的数据

测试插入范围超过临界值的数据:

测试float类型的四舍五入

​编辑

decimal类型

同样测试:

字符串类型

char类型

测试:

varchar类型

测试:

溢出测试:

DATA类型:

date类型

测试:

datetime

测试:

[timestamp :](#timestamp :)

测试:


INT类型

分为tinyint,.smallint,mediumint,int,bigint类型,在此处只介绍tinyint的细节,其他int的类型都是相似的,只需要注意类型的范围大小和有无符号即可。

tinyint类型

占用空间:1字节

类型大小范围

有符号时:-128 ~ 127

无符号时:0 ~255

测试tinyint类型数据

cpp 复制代码
#新建一张表用来测试,其中tinyint为有符号类型
mysql> create table t1(
    -> id tinyint);

#插入测试数据--插入最小值-128
mysql> insert into t1 values(-128);

#插入测试数据--插入小于最小值的值-129
mysql> insert into t1 values(-129);

#插入测试数据--插入最大值127
mysql> insert into t1 values(127);

#插入测试数据--插入超过最大极限的值128
mysql> insert into t1 values(128);

显示:当测试插入-128和插入127时,显示数据插入成功:

使用sql语句查询表中所有数据

cpp 复制代码
#显示指定表中的所有数据
select* from 表名

显示:

说明插入的数据只要在有符号tinyint规定的范围内,是可以插入成功的,那么来看看不合法的数据插入:插入测试数据-129和128

**MySQL直接提示数据过大,不允许我们此次插入。**换句话说,MySQL保证了自己表中数据的可靠性和合法性。

无符号的tinyint大家可以下来自行测试;

float类型

语法:float [(m,d)] [unsigned]:M指定显示长度,d指定小数位数,占4个字节空间

范围:例子:当m=4,d=2时,范围大小为[-99.99 ~ 99.99],float类型范围和用户自定义的m,d强关联

测试:

测试正常数据范围的数据

sql语句

cpp 复制代码
#插入负数的临界值
insert into test_float_tb values( 2,-99.99);
#插入整数的临界值
insert into test_float_tb values( 2,99.99);

#查看表中数据
select* from test_float_tb;

显示:说明数据在-99.99~99.99中的数据都能插入,只需注意建立表时的float类型设置的长度和精度即可

测试插入范围超过临界值的数据:

bash 复制代码
#插入100
insert into test_float_tb(1,100.00);
#插入999
insert into test_float_tb(2,999.00);

显示:说明表会约束用户差插入的数据,保证数据可信

注意:关于精度问题:当插入的数据的小数位长度超过创建表时的float的约束,会四舍五入存储,保证小数精度与表的约束的精度相等!

测试float类型的四舍五入

cpp 复制代码
#新建一张测试的表,float类型设置m=4,d=2
mysql> create table t2(
    -> score float(4,2)
    -> );

#插入测试数据77.556
insert into t2 values(77.556);

#插入测试数据80.0
insert into t2 values(80.0);

#测试插入数据79.99
insert into t2 values(79.994);

插入数据77.556后,显示数据插入成功,我们使用select* from t2查询一下表中的数据:

说明float类型会自动帮我们对查出指定精度的数据做四舍五入

float类型设置的d最大只能是8位,超过8位数据将会有缺失精度的风险!

cpp 复制代码
#更改先前创建的t2表中的float精度
mysql> alter table t2 modify salary float(20,10);


#插入测试数据127834.12345678435
mysql> insert into t2 values(127834.12345678435);

使用select* from t2查看表中数据:

精度缺失!

decimal类型

特点:所见即所得,和float相比最大的特征就是不存在损失精度的问题(前提是保证用户新增的数据不溢出),其他用法基本一致

同样测试:

cpp 复制代码
#创建表t4用来测试
mysql> create table t4(
    -> salary decimal(8,8));


#插入测试数据127834.12345678435
mysql> insert into t4 values(127834.12345678435);

显示

说明使用decimal类型可以保证浮点数的精度不会缺失

字符串类型

char类型

char类型在MySQL中是一种固定长度的字符串类型,建表时定义长度,只允许长度范围内的字符串插入;注意!此处的长度指的是字符长度,而不是字节!与编码格式相关,此处采用utf8的格式

测试:
cpp 复制代码
#新建表t5来测试char类型
mysql> create table t5( name char(2));

#插入字符数据'你好';
mysql> insert into t5 values('你好');

#插入字符数据'你好啊';
mysql> insert into t5 values('你好啊');

当插入2个字符'你好'时,MySQL允许插入,但是当插入'你好啊'时,此次插入被拦截

查一下t5中的内容:

varchar类型

很简单,就是一个可变长字符串类型,在用户设定的varchar范围内,会根据用户新增的字符串数据长度自动推导长度,但是不能超过建表时规定的varchar长度

测试:
cpp 复制代码
#更新一下表的属性
mysql> alter table t5 modify name varchar(5);

#插入'晚上好'
mysql> insert into t5 values('晚上好');

#插入'晚上好吗?'
mysql> insert into t5 values('晚上好吗?');

显示插入成功:查一下:

溢出测试:

cpp 复制代码
#插入数据'兄弟你好香啊!'
mysql> insert into t5 values('兄弟你好香啊!');

很显然不允许我们此次插入;

DATA类型:

常用的日期类型:

date类型

格式:日期 'yyyy-mm-dd' ,占用三字节

测试:

和上述的基本类型同样的测试方法,此处就不再赘述,唯一要注意的就是insert时注意日期的格式问题;

datetime

时间日期格式: 'yyyy - mm - dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节

测试:

和上述的基本类型同样的测试方法,此处就不再赘述,唯一要注意的就是insert时注意日期的格式问题,有空格隔开哦~;

timestamp

时间戳,从 1970 年开始的 yyyy - mm - dd HH:ii:ss 格式和 datetime 完全一致,占用 四字节

测试:
cpp 复制代码
#新建表t6来测试
mysql> create table t6(
    -> id int,
    -> time timestamp
    -> );

#插入id
mysql> insert into t6 values(1,'2004-12-29 08:43:09');

先不更新数据查一次表中数据:

再次更新时,时间戳会自动更新;

timestamp类型的数据不用用户手动添加,会随着当前行的数据更新为自动更新;

相关推荐
李宥小哥13 分钟前
ElasticSearch06-分片节点分配
数据库
小馋喵知识杂货铺25 分钟前
Linux 打印队列功能解析
linux·运维·chrome
Dream251237 分钟前
【MySQL数据基础】
数据库·mysql
努力成为DBA的小王1 小时前
Linux(网络协议和管理)
linux·运维·服务器·网络·网络协议
chengxuyuan1213_1 小时前
高级SQL技巧
java·数据库·sql
weixin_SAG1 小时前
21天掌握javaweb-->第15天:综合项目实战启动与需求分析
数据库
搬山.摧城1 小时前
linux - 软硬链接
linux·运维·服务器
C howe2 小时前
linux basics
linux·运维·服务器
AiFlutter2 小时前
Linux 端口操作
linux·运维·服务器
AiFlutter2 小时前
Linux 解决用userdel删除不掉用户的问题
linux·运维·服务器