赞
踩
一.数据类型
定义:是指对数据进行统一的分类,从系统的角度出发是为了使用统一的方式进行管理,管理更好的利用有限空间。
SQL中将数据类型分成了三大类:数值类型、字符串类型和时间日期类型。
1.数值类型
数值型数据:都是数值,系统将数值型分为整数型和小数型。
1.1 整数型
存放整型数据:在SQL中因为更多考虑如何节省磁盘空间,所以系统将整型又细分成了5类
1.Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种,-128~127(常用)。
2.Smallint:小整型,使用2个字节存储,表示的状态最多为65536种。
3.Mediumint:中整型,使用3个字节存储。
4.Int:标准型,使用6个字节存储(常用)。
5.Bigint:大整型,使用8个字节存储。
(a)创建一张整型表:
1 show databases;2 setnames gbk;3 usemy_database;4 --创建一张整型表:
5 create table my_int(int_1 tinyint,int_2 smallint, int_3 int, int_4 bigint) charset utf8;
(b)插入数据:
1 insert into my_int values(100,100,100,100); --有效数据
2 insert into my_int values('a','b','199','f'); --无效数据:类型限定 (数据类型不正确)
3 insert into my_int values(255,10000,100000,1000000); --错误:超出范围
注意:SQL中的数值类型全部默认有符号,分正负,有时候需要使用无符号数据,需要给数据类型限定:int unsigned; --无符号,即从0开始。
(c)给表增加一个无符号类型:
1 Alter table my_int add int_5 tinyint unsigned; --无符号
注意:查看表结构,发现每个字段的数据类型之后都会自带一个括号,里面有指定的指定的数字;里面带的数字为显示宽度:数据显示的位数,如-123是4位显示宽度(包含符号),255是3位宽度
--显示宽度:没有特别的含义,只是默认的告诉用户可以显示的形式而已,实际上用户是可以控制的,这种控制不会改变数据本身的大小。
1 alter table my_int add int_6 tinyint(1) unsigned; --指定显示宽度为1
2 insert into my_int values(127,0,0,0,255,255);
显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度,通常需要搭配一个前导0来增加宽度,不改变值大小:zerofill(零填充),零填充会导致数值自动变成无符号。
1 alter table my_int add int_7 tinyint(2) zerofill; --显示宽度为2,0填充(超过2位不管,低于2位0填充,比如1变为01)
零填充+显示宽度的效果:
1 insert into my_int values(1,1,1,1,1,1,1);2 insert into my_int values(100,100,100,100,100,100,100);
零填充的意义(显示宽度):保证数据格式。
1.2 小数型
定义:带有小数点或者范围超出整型的数值类型,在SQL中,将小数型细分成2种:浮点型和定点型。
浮点型:小数点浮动,精度有限,而且会丢失精度。
定点型:小数点固定,精度固定,不会丢失精度。
1.2.1 浮点型
浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)。
浮点型:理论分为两种精度
Float: 单精度,占用4个字节存储,精度范围(有效数字范围)大概为7位左右,最小值很小很小,最大值很大很大
Double: 双精度,占用8个字节存储,精度范围大概为15位左右,最小值很小很小,最大值很大很大。
(a)创建浮点数表: 浮点的使用方式,直接float 表示没有小数部分,float(M,D),M代表总长度,D代表小数部分长度,整数部分长度为M-D。
1 CREATE TABLE my_float (f1 float ,f2 float(10,2),f3 float(6,2))charset utf8; --10位在精度范围之外,6位在精度范围之内,
(b)插入数据:可以是直接小数,也可以是科学计数法。
1 Insert into my_float values(1000.10,1000.10,1000.10); --符合条件
2 Insert into my_float values(1234567890,12345678.90,1234.56); --符合条件
3 insert into my_float values(3e38,3.01e7,1234.56); --符合条件
4 insert into my_float values(9999999999,99999999.99,9999.99); --最大值 --符合条件
注: 浮点数据的插入,整数部分是不能超出长度的,但是小数部分可以超出长度(系统会自动四舍五入)。
(c)超出长度插入数据
1 insert into my_float values(123456,1234.123456768,123.9876543);--小数部分超出ok
2 insert into my_float values(123456,1234.12,12345.56);--整数部分超出(f3)
结果:浮点数一定会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也允许成立.
1.2.2 定点型
定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论上小数部分也不会丢失精度)。
(a) 创建定点数表:以浮点数作为对比
1 CREATE table my_decimal(f1 float(10,2), d1 decimal(10,2))charset utf8;
(b) 插入数据
1 insert into my_decimal values(12345678.90,12345678.90); --有效数据
2 insert into my_decimal values(1234.123456,1234.123456); --小数部分超出:ok
(c)查看警告代码:
1 show warnings;
注意: 浮点数如果进位导致长度溢出没有问题,但是定点数不行。
(d)插入今晚导致超出长度数据
1 insert into my_decimal values(99999999.99,99999999.99); --没有问题
2 insert into my_decimal values(99999999.99,99999999.999); --d1进位超出范围,不行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。