MySQL燕十八老师课程笔记:第三课:列类型-字符型和字符串型

怎么建表?——只要把第一行表头建好了,这张表也完成了。至于其他的数据,已经不是表的概念了,而只是表中的数据。
因此,建表的过程,就是一个画表头的过程,即:建表的过程就是一个声明字段的过程。

建表和列类型的关系:
存储同样的数据,不同的列类型,所占据的空间和效率是不一样的。

重点:学习列类型的存储范围和占据的字节关系。

MySQL三大列类型:
数值型
1.整型
1.1 Tinyint:占一个字节,存储范围:有符号数:-128 ~ 127,无符号数:0~255,
(这里,燕十八老师的网课,深刻理解了反码原码补码的关系,详见: https://www.bilibili.com/video/av19538278/?p=9 时间:大概13分左右)
一般而言:设某类型N字节,则:8N位
对于int型,占据的字节越多,存储的范围也越大。
(M) unsigned zerofill
int系列,不加特殊说明时,默认为有符号系列。

#加一个学分列;
 alter table class add score tinyint unsigned not null default 0;
 #在列类型后加unsigned表示其为无符号类型
 desc class;

在这里插入图片描述
zerofill:代表0填充,M必须和zerofill配合才有意义

#例:给class表增加一个类:学号
 #1.学号不能为负,2.学号一般位数相同,即使不同,也有:00013/01235
 #即,不够位数,用0填充
 alter table class add snum smallint(5) zerofill not null default 0;

经测试后发现:snum统一被补0,而且补到5位(因为M=5),且M必须和zerofill配合使用,才有意义。
且可知,zerofill同时必须是unsigned类型。

2.浮点型
小数大小的定义:小数点左边,能大到多少?/小数点右边,又能大到多少?
float(M,D) decimal(M,D)::M叫“精度”,代表“总位数”;D叫“标度”,代表小数位。
例如:float(6,2)代表:-9999.99~9999.99

create table salary(
sname varchar(20) not null default '',
gongzi float(6,2)
)engine myisam charset utf8;

insert into salary values('张三',-9999.99);
insert into salary values('李四',9999.99);

在这里插入图片描述

alter table salary add bonus float(5,2) unsigned not null default 0.00;

在这里插入图片描述

insert into salary(sname,bonus) values ('王五',888.88);

在这里插入图片描述

insert into salary(sname,bonus) values ('王五',-0.88);
#这个句子不允许,因为bonus是unsigned类型,不能为负

浮点数占多大的空间?
float能存1038~10-38,如果M<=24,则占4个字节,否则占8字节。
还有一种叫 定点 decimal,定点是把整数部分和小数部分分开存储的,比float更精确。

create table account(
id int not null default 0,
acc1 float(9,2) not null default 0.00,
acc2 decimal(9,2) not null default 0.00
)engine myisam charset utf8;

insert into account
values
(1,1234567.23,1234567.23);

在这里插入图片描述观察上例,可以看出,float的精度有时会损失
(像银行这种需要高精度的存储,一般用int存——存到单位为 “分”)

字符串型 :char varchar text blob
char(6) : 定长字符串

对于定长N,不论存储的数据到底是不是N个长度,都存为N个长度。如果不够N个长度,用空格在末尾补至N个长度。

varchar(100):变长类型。存储0-100个字符。

区别:对于char(N),不够N个长度,用空格在尾部补够N个长度,浪费了尾部。而对于varchar(N ),不够用空格补齐,但列内容前,有1-2个字节来标志该列的内容长。

注意:char(M)和varchar(M)限制的是字符,不是字节。
即:char(2) charset utf8,能存2个utf8字符,比如“中国”。但是不能以‘一个中文字符占据2个字节,那应该可以存4个英文’这种思维理解。因为主要是字符,不是字节。

text:文本类型,可以存比较大的文本段,搜索速度稍慢,因此,如果不是特别大的内容,建议用char、varchar来代替。 且text不用加默认值(加了也没用)

blob,是二进制类型,用来存储图像、音频等二进制信息。
意义:2进制,0-255都有可能出现,blob在于防止因为字符集的问题,导致信息丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值