MySql常用数据类型及其基本使用

MySql常用数据类型(列类型)

数值型(整数)的基本使用

说明:在满足需求的情况下,尽量选择占用空间小的类型

类型字节最小值       最大值
(带符号的/无符号的)(带符号的/无符号的)
TINGINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INT4-21474836482147483647
04294967295
BIGINT8-2^632^63-1
02^64-1

实例:测试数据类型TINGINT的数据范围

可以观察到-129,128超出TINYINT数据类型所包含的数据范围

在实际应用中,为了节省内存,并且所输入的数据是正数,我们可以使用unsigned关键字使数据类型变成无符号数据类型,这样就可以输入更大的数据

此时可以发现数据库编辑系统并没有报错

使用select语句查询t4表的数据发现可以录入(超出数据范围录入不了)

此时就不可以输入负数(不在无符号数据类型范围内)

数值型(bit)的使用

1. 基本使用

mysql>create table t02 (num bit(8));

mysql>insert into t02(1,3);

mysql>intsert into t02 values(2,65);

2.细节说明

bit字段显示时,按照位的方式显示

查询的时候仍然可以使用添加的数据

如果一个值只有0,1可以考虑bit(1),可以节约空间

位类型,M指定位数,默认值1,范围1-64

数值型(小数)的基本使用

1. FLOAT/DOUBLE [UNSIGNED]

Float 单精度,Double 双精度

2. DECIMAL(M,D) [UNSIGNED]

- 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数

- 如果D是0,则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略, 默认是0。如果M被省略,默认是10

实例:

由图可知,向CC04中三个不同数据类型输入11.123456789123456789,观察三个不同数据类型对数据的保存情况,可知float,double数据类型进位制采用四舍五入进位制,并且decimal数据类型对多出来的位数进行补零填充

字符串的基本使用

CHAR(size)
固定长度字符串 最大255字符

VARCHAR(size)

可变长度字符串 最大65532字节【utf8编码最大21844字符 1-3个字节用于记录大小】

注:

根据不同的字符编码方式,相同字节所能输入的字符数不同

例:

在utf8编码方式下,varchar 字符串长度最大字节为 65535 但其中有三个字节用于记录数据大小,所以能输入的字符串字节数为65535 - 3 = 65532,在utf8字符编码方式下 一个字符站3个字节,所以最终可输入字节为 65532 / 3 = 21844个

例:

由图可知,当设置varchar数值长度为21845时,系统进行报错,原因是65535中三个字符用来记录数值大小,所以字符长度最大为21844

字符串使用细节

1. char(4)

// 这个4表示字符数量(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算

 varchar(4)

// 这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据

注:根据如上所述,根据不同的字符编码(如utf8 一个字符占三个字节,gbk 一个字符占用2个字节)所占用的空间不同

2. char(4)是定长,即即使插入‘aa’,也会占用4个字符

 varchar(4)是变长,即插入‘aa’,实际占用空间大小并不是4个字符而是按照实际占用空间来分配

// varchar本身还要占用1-3个字节来记录存放内容长度

3. char 和 varchar 的使用情况

// 如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号等

// 如果一个字段的长度是不确定的,使用varchar,比如留言、文章

查询速度:char > varchar

4. 在存放文本时,也可以使用Text数据类型,可以将Text列视为varchar列,注意Text不能有默认值,大小0-2^16字节

// mediumtext 2^24 longtext 2^36

日期类型的基本使用

如下图所示:对创建的表cc06的birthday,job_time 插入相关数据,login_time 不插入数据

#演示时间相关的数据类型
CREATE TABLE cc06(
	birthday DATE,
	job_time DATETIME,
	-- 若希望 login_time 自动更新可进行相关设置
	login_time TIMESTAMP 
		NOT NULL -- 不可为空
		DEFAULT CURRENT_TIMESTAMP -- 默认当前时间戳
		ON UPDATE CURRENT_TIMESTAMP -- 修改时自动以当前时间戳为准
);
INSERT INTO cc06 (birthday , job_time) 
	VALUES('2022-11-11','2022-11-11 10:10:10');
SELECT * FROM cc06

根据所得接结果可知login_time列,自动插入当前时间戳

此时我们再进行对birthday,job_time  插入新的数据

INSERT INTO cc06 (birthday , job_time) 
	VALUES('2022-11-12','2022-11-12 11:10:10');
SELECT * FROM cc06

列login_time 会根据当前的时间进行更新

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值