zoukankan      html  css  js  c++  java
  • 小贝_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!

  • 相关阅读:
    大数据学习——hive数据类型
    大数据学习——关于hive中的各种join
    大数据学习——hive的sql练习
    大数据学习——hive显示命令
    大数据学习——hive数仓DML和DDL操作
    大数据学习——hive基本操作
    大数据学习——hive使用
    大数据学习——hive安装部署
    大数据学习——日志分析
    大数据学习——mapreduce运营商日志增强
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5226998.html
Copyright © 2011-2022 走看看