时间:2021-07-01 10:21:17 帮助过:4人阅读
mysql基础就先从支持的数据类型说起,mysql一共支持三种数据类型,数值类型,字符串类型,日期。
数值类型:数值类型又分为两种类型整型和浮点类型
整型:bit、bool、tinyint、smallint、mediumint、int、bigint
浮点型:float、double、decimal
字符串类型:char、varchar、tinytext、text、mediumtext、longtext、tinyblob、blod、mediumblob、longblob
日期类型:date、time、datetime、year、timestamp
第一个说整型,整型是一个比较常用的数据类型,在it这块还是比较常见的。整形有五种,分别为bit、bool、tinyint、smallint、mediumint、int、bigint。
那么这五种类型的所占空间是多少呢,咱们先来测一下。建立一张表,随意建立一个。
- <span style="color: #008080;">--</span><span style="color: #008080;"> 存在删除表</span>
- <span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span> <span style="color: #0000ff;">if</span> <span style="color: #808080;">exists</span><span style="color: #000000;"> test_table_one;
- </span><span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> test_table_one(
- a </span><span style="color: #0000ff;">bit</span><span style="color: #000000;">,
- b bool,
- c </span><span style="color: #0000ff;">TINYINT</span><span style="color: #000000;">,
- d </span><span style="color: #0000ff;">SMALLINT</span><span style="color: #000000;">,
- e </span><span style="color: #0000ff;">int</span><span style="color: #000000;">,
- f </span><span style="color: #0000ff;">BIGINT</span><span style="color: #000000;">
- )</span>
查看一下表结构。
- <span style="color: #008080;">--</span><span style="color: #008080;"> 查看表结构</span>
- <span style="color: #0000ff;">desc</span> test_table_one;
得到结果。
从这张表中,我们看到的并不是这些类型的实际存储大小,这些只不过是最小的显示位数,基本上建表的时候使用默认给定的就可以了,除非有特殊需求,指定了zerofill,类似下面这种情况。
- <span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span> <span style="color: #0000ff;">if</span> <span style="color: #808080;">exists</span><span style="color: #000000;"> test_table_one;
- </span><span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> test_table_one(
- a </span><span style="color: #0000ff;">bit</span><span style="color: #000000;">,
- b bool,
- c </span><span style="color: #0000ff;">TINYINT</span><span style="color: #000000;">,
- d </span><span style="color: #0000ff;">SMALLINT</span><span style="color: #000000;">,
- e </span><span style="color: #0000ff;">int</span>(<span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">) ZEROFILL,
- f </span><span style="color: #0000ff;">BIGINT</span><span style="color: #000000;">
- )</span>
要想指定显示的位数,就可以像上边e int(10)这样去指定。
得到的结果
- <span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> test_table_one <span style="color: #0000ff;">set</span> e <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span> test_table_one;
真正的存储空间占用的大小在下面这张图(来自于w3c)
当选用类型的时候,一定要考虑好字段的范围,然后根据范围去选,这里给出一个阿里开发规范中的推荐选择,就是id应该选择bigint类型。
接下来就是浮点类型了,浮点类型有三种,float,double、decimal。这三种类型还有另一种表现形式,float(m,d),double(m,d),decimal(m,d),解读一下第二种表示方式的含义,其中m为全部位数的个数,d为小数的最大位数。在float和double中,m的范围为0到60,而d的范围为0到30,,表示的范围在上面的表中有体现。
再说一下decimal,decimal也有两种表现形式一种是decimal,第二种就是decimal(m,d),m和d的含义和double和float的意义一样,唯一不同的是,如果使用decimal,并且没有指定m和d,这里有一个默认的值,m默认为10,d默认为0.测一下。
- <span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span> <span style="color: #0000ff;">if</span> <span style="color: #808080;">exists</span><span style="color: #000000;"> test_table_two;
- </span><span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> test_table_two(
- a </span><span style="color: #0000ff;">float</span><span style="color: #000000;">,
- b </span><span style="color: #0000ff;">double</span><span style="color: #000000;">,
- c </span><span style="color: #0000ff;">decimal</span><span style="color: #000000;">
- )
- </span><span style="color: #0000ff;">desc</span> test_table_two;
运行结果为
系统给定的默认值为m=10,d=0,当存入的数精度不符时,三种都会发生截断现象。测试数据
- <span style="font-size: 18px;"><span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span> <span style="color: #0000ff;">if</span> <span style="color: #808080;">exists</span><span style="color: #000000;"> test_table_two;
- </span><span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> test_table_two(
- a </span><span style="color: #0000ff;">float</span>(<span style="color: #800000; font-weight: bold;">6</span>,<span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">),
- b </span><span style="color: #0000ff;">double</span>(<span style="color: #800000; font-weight: bold;">6</span>,<span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">),
- c </span><span style="color: #0000ff;">decimal</span>(<span style="color: #800000; font-weight: bold;">6</span>,<span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">)
- )
- </span><span style="color: #0000ff;">desc</span><span style="color: #000000;"> test_table_two;
- </span><span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> test_table_two <span style="color: #0000ff;">values</span>(<span style="color: #800000; font-weight: bold;">1.23456</span>,<span style="color: #800000; font-weight: bold;">2.345</span>,<span style="color: #800000; font-weight: bold;">5.6789</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span> test_table_two;</span>
结果:
不光超出的位数发生了截断,而且还进行了四舍五入。不过阿里还是推荐使用decimal(m,d)的这种方式,一只没弄清楚原因。
未完,待续。。。。。。
mysql入门-数据类型(一)
标签:ros 两种 alt 基础 字符串 ext 需求 就是 也有