mysql输出数据类型_mysql的数据类型,列类型,字段类型

单精度,float,4个字节

双精度,double,8个字节

在定义浮点数,典型的需要指明其有效位数,和 小数位数

float(M,D)

double(M,D)

M:所有的有效位数

D:其中的小数位数

以上两个值,决定一个浮点数的有效范围

如果超出了范围就会按照最大值来显示,并不会报错;

注意,浮点数,近似值,不是精确值!如果一个数,很大,接近最大值,可能出错!

871ec3e648a5c09e7540fbf838d0010d.png

一旦出现精确数据(小数)需要保存可以使用,下面的定点数;

定点数,decimal:

小数点是固定的! decmal,与定义浮点数一致,也有 有效位数与小数位数的概念:

decimal(M,D)

f8f8ba53bed1718046cdc60c5e2511aa.png

不是数的形式存储,类似于字符串的形式!

create table type_cermal(

num decimal(30,2)

);

insert into type_cermal values(222222.24);

insert into type_cermal values(222222.254); -- 如果小数点超出范围之后,就支取前两位

关于小数:

1.是支持科学计数法的

7f9a2c07b1cf61ab459d30a5213a6ba5.png

2.同样支持unsigned类型 、

3.同样支持zerofill

5f47f45a054b083d51940f64214e5987.png

TIP:小数的M,即表示有效范围,也表示显示宽度!(而整数的M只表示显示宽度)

字符串类型:

char:

最基本(定长)的字符串类型!

用于保存,长度固定的内容!

速度快,但是保存变长数据,会浪费空间!

varchar:

可变长度的字符串!

用于保存长度可变的数据!

保存变长数据时,节省空间,处理起来麻烦些!

char(L),varchar(L)

L,表示每个数据的最大长度!单位是 字符数(不是字节数)

create table type_char(

str char(10)

);

insert into type_char values(13546346);insert into type_char values(135463245646);

超过了指定的字符串就会只显示前制定的个数,后面就不会显示;

L 表示最大长度!

L的值不是多大都可以!

有最大值:

1,mysql一条记录最大不能超过65535个字节!(字段的长度加起来,不能超过这个值) 2,长度单位是字符数,与编码是相关的!

beb7ee77ceaef8ed3a46283139fe894c.png

采用单字节编码测试下:

Latin1

5e7b7e2bb403288ecbc87821b6a7ff83.png

测试发现只有一个字段,而且是单字节字符集,还是不能是65535,原因是?

b25447ab4a3b36174d60b60c39a1fdd6.png

为什么是 65532呢,少了三个字节:

3,由于varchar是变长,需要记录下真实的数据到底有多长!每个varchar类型的数据,还需要额外的1个或2个字节保存真实数据的长度!(取决于真实数据的长度)

4,整条记录,还需要一个字节来保存那些字段为null ·

a801163b7eebccd6ccc084ac5e4c4be4.png

但是在使用的时候,如果varchar超过了255就需要用text来保存;

.text:

文本,不限长度的字符串!

该字段,不需要指定长度,而且也不会算入到记录的总长度内!

d7124cca2fb0c4eb97d250de5b5f1b0f.png

枚举 enum  单选:

需要在定义枚举类型时,列出哪些是可能的!

create table type_enmu(

num enum('male', 'remale', 'serect')

);

b4a49e3b450a75299e5066b00cabd715.png

在处理时,类似字符串型进行操作!

意义在于:

1, 限定值的可能性!(只能是选项里面的值)

f010ae8c9855033da284643d24e067f5.png

2.速度快,比普通的字符串速度快!

原因是枚举型 是利用 整数进行管理的,能够2个字节进行管理!

b54bbae05c6816aeb1372b014cb51071.png

每个值,都是一个整数标识,从第一个选项开始为1,逐一递增!

管理时整数的形式,速度比字符串快!

这个下标是从1开始的 而不是从0,如果输入的是不是这个范围内的值得话,就会和下面一样虽然不报错但是都是0,前面的值也为空;

64d27ae9b24fd80ed595ac832dd37b8c.png

b3040dbd504bdfc01e5786e46d366220.png

2 个字节,0-65535,因此可以有 65535个选项可以使用!

集合,set,复选:

类似于 enum枚举,在定义时,也需要指定其已有值!

与字符串相比,优势是:

1, 也是采用 整数进行管理的!采用位运算,从第一位开始为1,逐一x2!

create table type_set(

hobby set('male','remale','select','other')

);

insert into type_set values('male');

insert into type_set values('male','reamale');

insert into type_set values('male','remale','other');

insert into type_set values(1);

insert into type_set values('1,2'); -- 显示没有数据

e3cb664d55c2493c50d70e6000e96bf8.png

1, 每个集合类型8个字节,64位,因此可以表示64个元素!

注意:站在 mysql的角度,尽量多用枚举和集合!

但是站在php操作mysql的角度,尽量少用!(兼容性差);

日期时间:

datetime:

日期时间,用于保存大范围的日期时间!

'1000-01-01 00:00:00'到'9999-12-3123:59:59'

在处理时是使用字符串的形式进行管理!

69b2132a91c3786bb5d453e20885b4d1.png

timestamp:

时间戳,管理常用的典型时间,从1970-1-1开始。空间少,而且是以整型的形式管理,但是一个字符串的形式展示的! 如果低于这个时间就会显示一长串的0

c4740f49496d72240329051690049436.png

data:

日期,如果只记录日期,不记录时间采用 date!

year:

在保存年份的时候。

采用一个字节保存!因此只能表示 1901——2155年!

time:

时间,时间时刻!

还可以表示时间跨度!时间段的概念!

d7400f08fd8626b75677d17fc357909f.png

总结:

one:除了time,表示都是时间点的概念!time还表示时间跨度!

two:年份的表示

可以采用2位年份:

0-69 表示 20 XX

而 70-99 表示 19XX

4bf8738f9a70ff1beaebbb9d2faabde1.png

1, 除了-还有:可以作为日期和时间分隔符之外,很多其他字符都可以!

d67ecca01314f5ff2b3e995c70f831c9.png

放在php程序中:

小范围的日期:使用整型

大范围的日期:字符串!

列属性,字段约束:

mysql的NULL不是数据,也不是类型!只是标识属性!

用于说明某个字段,是否可以为null(是否可以什么都不存)

NULL采用关键NULL表示!(不是字符串)

是:NULL,而不是:‘NULL’

属性:

null 表示可以为空

96248d5d8258fe1e314ac8e6782571a9.png

not null,表示不能为空

3acbb6f50bcad41a5301b401b34bb450.png

如果,在添加数据时 ,没有指定值,也可能会是NULL!

default属性,默认值约束;

采用 default 关键字,来限定一个字段的默认值,在没有指定字段数据时,采用默认值!

create table preperty_default_1 (

id int,

name varchar(10) default 'itcast'

);

insert into preperty_default_1 (id) values (1);

insert into preperty_default_1 values (2, null);

00e51bf39c28495bbd9fde78cbb3f353.png

如果一个字段没有指定默认值,那么默认为NULL

此时:如果在定义该字段时,不允许为NULL,则插入时,必须保证该字段有值才可以!

(另外一个选择是增加默认值)

68f84e601f6722a3dc273755754cf901.png

current_timestamp ,用在第一个时间戳前面表示当前的时间;

e5448aae19519c12d21dac15d8ae54d6.png

典型在很多表上增加一个 update_time 将其默认值设置成 current_timestamp。就可以记录下当前记录的最后操作时间!

主键约束/唯一约束  primary unique:

站在约束的角度,限制的,该字段,值要唯一!

但是主键 与 唯一 不是一个概念:

都是索引的一种!

主键:

可以唯一标识记录的字段,称之为主键!

唯一:

保证在某个字段上的数据是唯一的,可以设置成唯一约束!

但是,一个表,只能有一个主键!

典型的,在创建表时,主动增加一个非实体的自然属性,充当主键,采用整型,运算速度快!

18956ad7e1ae18ea3645d5156016011d.png

其他的唯一字段,建立唯一约束!

建立:

两种方案:

d0e45a90a168dedaa61b9617ed09165a.png

一旦创建了主键:

默认就是不能为空:

e047571b713f84b97cc5a2398177b5a5.png

唯一,使用 unique key 来创建!

create table preperty_unique_1 (

id int primary key,

sn char(5) unique key,

name varchar(10)

);

85ceb42c53f7a16d885a8797e4c9b4c3.png

一个表可以有多个唯一,但是只能有一个主键!

注意:主键或者是唯一,都可以由 多个字段组成!

a8d3d71430615001a41398acececc32b.png

因此,主键 与 字段的概念:字段来充当主键,不是字段就是主键!(称之为复合主键)

尽量采用 id 一个来作为主键!

c888b6881474e84500a66e8bd11627c1.png

如何管理主键/唯一?

删除主键:

alter table 表名 drop primary key;

93659f8a9b30aaf83f6637887e929bf2.png

添加主键

later table 表名 drop primarry  key(字段列表);

c2c8f69f3469c7c195d3dea747680a54.png

删除唯一:

alter table 表名  drop index index_name;

alter table preperty_unique_3 drop index sn;

索引的名字,可以通过 show create table table_name;看到!

5017ee0e72175cd9fa7b4828c9b87e8d.png

4a0a9e203014643f47aaa39d089bad0b.png

添加唯一

alter table表名 add unique

index 索引名(字段列表);

alter table preperty_unique_3 add unique index itcast (sn);

e4a835daa6de72fd75ac8ea3606816fe.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值