小贝_mysql建表以及列属性

mysql建表以及列属性

简要:
一、建表原则
二、详细的列属性说明

 

一、建表原则

建表: 其实就是声明列的过程,数据最终是以文件的形式放在硬盘(内存)

列: 不同的列类型占的空间不一样. 选列的原则: 够用,不浪费

 

二、列类型以及属性说明

列类型有: 整形、浮点型、字符型、日期/时间型

2.1、整形

tinyint/smallint/mediumint/int/bigint

2.1.1、详解tinyint 一个字节

[][][][][][][][]共8位

假设8为都为0 ==》 转化为十进制 0

假设8为都为1 ==》 转换为十进制 2^8-1

由于计算机也能够存储负数,并采用最高位为符号位

最高位为0代表正数 最高位为1代表负数

当最高位为0时:

[0][][][][][][][] => 0~2^7-1 转化为十进制 0~127

当最高位为1时

[1][][][][][][][] => 0~-2^7  转化为十进制 0~-128

字节

无符号

有符号

tinyint

1

0~255

-128~127

smallint

2

0~2^16-1

-2^15~2^15

medium

3

0~2^24-1

-2^23~2^23

int

4

0~2^32-1

-2^31~2^31

bigint

8

0~2^64-1

-2^63~2^63

2.1.2、实例

2.1.3、整形列可选属性: not null unsigned zerofill

总结:

a、声明整数型列需要0填充时,它一定是无符号的

b、进行0填充时,不会改变其大小值

 

2.2、浮点型

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

float与decimal的区别:decimal更精确

 

2.3、字符型

char:定长char(M),M代表宽度,即可容纳的字符数

varchar:变长char(M),M代表宽度,即可容纳的字符数

区别:

a、效率方面看,char<=1               varchar<1

即char会有完全利用的情况,而varchar则不会。因为同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度

b、针对尾部(从左往右的方向看),char会过滤尾部有空格的情况,而varchar不会。因为char存储的字符少于定义的字符长度时,就会对尾部进行空格填充.进行展示时,再把尾部的空格去掉

案例:

CREATETABLE vc (v VARCHAR(4), c CHAR(4));

INSERTINTO vc VALUES ('ab  ', 'ab  ');

SELECTCONCAT(v, '+'), CONCAT(c, '+') FROM vc;

字节问题:

varchar(N),  这里的N是指字符数,并不是字节数.占用的字节数与编码有关

utf-8,一个汉字3字节 英文字母1字节

MySQL 5.0以上的版本:

1.一个汉字占多少长度与编码有关:

UTF8:一个汉字=3个字节

GBK:一个汉字=2个字节

2.varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别

3.MySQL检查长度,可用SQL语言:

select LENGTH(fieldname) from tablename来查看

2.4、日期与时间型

2.4.1、 year


总结

MySQL以YYYY格式检索和显示YEAR值。范围是1901到2155。

可以指定各种格式的YEAR值:

·        四位字符串,范围为'1901'到'2155'。

·        四位数字,范围为1901到2155。

·        两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。

·        两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。你必须将它指定为一个字符串'0'或'00'或它被解释为0000。

2.4.2、 time

MySQL以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

2.4.3、 date

当你只需要日期值而不需要时间部分时应使用DATE类型。MySQL用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01'到 '9999-12-31'。

2.4.4、  datetime

总结:虽然mysql有时间与日期的类型。但在一般的开发过程中涉及到跟时间方面的列类型时,通常使用int即整形类型。主要考虑到开发方面的方便,而且整形效率高。


The quieter you become,the more you are able to hear!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值