MySql的回顾八数据类型介绍

  漆黑的夜空,总能让人产生无数的遐想,不知屏幕前的你,这周过得怎么样?玩耍也好,"修炼"也好,总之时间在不断从我们各处穿梭而过,

但你既然都点进来了,那在这短短的5分钟内我就来带你领来温习一下Mysql数据类型吧!

#常见的数据类型
数值型:
    整型
    小数:
        定点数
        浮点型
    字符型:
        较短的文本:char,varchr
        较长的文本:text,blob(较长的二进制数据)

  一.整型

     

      

分类:
tinyint,smallint,mediumint,int/integer,bigint
1        2        3          4          8

特点:
①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,
需要添加UNSIGNED关键字。 ②如果插入的数值超出了整数的范围,会报out
if range异常,并且插入临界值 ③如果不设置无符号和有符号,有符号的Int长度默认11,无符号Int的默认长度10 ④长度代表了显示的最大宽度,如果不够用会用0在左边填充, 但必须搭配ZEROFILL使用。
#案例:1.如何设置有符号和无符号
#有符号的
    CREATE TABLE tab_int(
            t1 INT
                     );
DESC tab_int;
插入一条数据
INSERT INTO tab_int VALUES(-123456);
/* Affected rows: 1  Found rows: 0  Warnings: 0  Duration for 
1 query: 0.016 sec.
*/ /* 受影响的行:1 找到的行:0 警告:0 1 查询的持续时间:0.016 秒*/
删除表 DROP TABLE IF EXISTS tab_int; #重新创建表 创建t2为无符号的数据类型 CREATE TABLE tab_int( t1 INT, t2 INT UNSIGNED ); DESC tab_int;

#插入一条数据

#插入一条数据
INSERT INTO tab_int VALUES(-123456,0);
SELECT * FROM tab_int;

#长度设置,长度是不代表数据范围,只是代表占术数据的宽度。数据范围由类型决定。
设置了宽度,如果不够会用0去填充。
删除表,再次创建
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
    t1 INT(7),
    t2 INT(7) UNSIGNED
                );
DESC tab_int;

插入数据,查看数据
INSERT INTO tab_int VALUES(123,123);
SELECT * FROM tab_int;

为什么没0填充?
删除表,再次创建,给字段后添加ZEROFILL关键字,
添加ZEROGILL后变为无符号数据类型。 DROP TABLE IF EXISTS tab_int; CREATE TABLE tab_int( t1 INT(7) ZEROFILL, t2 INT(7) UNSIGNED );
插入数据,查看数据
INSERT INTO tab_int VALUES(123,123);
SELECT * FROM tab_int;

二.小数

备注:±正负号:按住Alt再用小键盘输入0177
分类
1.浮点型
    float(M,D)
    double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
定点型

特点
①
    M:整数部位+小数部位
    D: 小数部位
    如果超过范围,则插入临界值
②
    M和D都可以省略
    如果是decimal,则M默认为是10,D默认为0(如果超过会报错)
    如果是float和double,则会根据插入的数值精度来决定精度
③    
    定点型的精确度较高,如果要求插入数值的精度较高如
    货币运算等则考虑使用
备注:一般用float就行,节省空间
建表数据类型选择的原则:
    所选择的类型越简单越好,能保存数据类型越小越好。
#测试M与D
CREATE TABLE tab_float(
    f1 FLOAT(5,2),
    f2 DOUBLE(5,2),
    f3 DECIMAL(5,2)
                );
DESC tab_float;

插入数据,正常执行
INSERT INTO tab_float
VALUES(123.45,123.45,123.45);
SELECT * FROM tab_float;

再次插入数据
INSERT INTO tab_float
VALUES(123.456,123.456,123.456);

查询数据
SELECT * FROM tab_float;

四舍五入了
再次插入数据
INSERT INTO tab_float
VALUES(123.4,123.4,123.4);
SELECT * FROM tab_float;

再次插入,测试
INSERT INTO tab_float
VALUES(1523.4,1523.4,1523.4);
超出范围报错,无法插入

先删除,再次创建tab_float表,省略后(M,D),正常执行
DROP TABLE tab_float;
CREATE TABLE tab_float(
    f1 FLOAT,
    f2 DOUBLE,
    f3 DECIMAL
                    );
SELECT * FROM tab_float;   

再次插入数据,f3报错
INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
DESC tab_float;

.字符型(串数据/文本型/二进制)

 

char和varchar类型
说明:用来保存MySql中较短的字符串

 

分类
较短的文本:
cahr varchar
特点:

备注:                
固定的用char如性别只有男或女
姓名用varchar 不同民族的姓名长度不一样
char(M)可以省略M,默认为1
varchar不可以省略

较长的文本:
text
blob(较大的二进制)
位类型

Binary和varbinary类型(较短的二进制)
说明:类是与char与varchar,不同的是它们包含了二进制字符串不包
含非二进制字符串。
Enum类型(一娜姆) 说明:又称为枚举类型哦,要求插入的值必须属于列表中指定的值之一。
其他: binary和varbinary用于保存较短的二进制 enum用于保存枚举 set用于保存集合
建表
CREATE TABLE tab_char(
c1 ENUM('E','S','W','N')
                     );
#东—East,西—West,南—South,北—North 
插入数据
INSERT INTO tab_char VALUES('w');
INSERT INTO tab_char VALUES('W');
INSERT INTO tab_char VALUES('N');
 Affected rows: 3  Found rows: 0  Warnings: 0  Duration for 3 queries:
0.015 sec.
受影响的行:3 找到的行:0 警告:3 个查询的 0 持续时间:0.015 秒。

性别(男女)与季节(春夏秋冬)也可以考虑使用枚举类型。

Set类型
说明:和Enum类型类似,里面可以保存0~64个成员。
和Enum类型最大的区别是:
SET类型可以选取多个成员,
而Enum只能选一个,根据成员个数不同,存储所占的字节也不同。
#建表测试
CREATE TABLE tab_set(
        s1 SET('c','x','q','d')
        );
DESC tab_set;

#插入数据,初夏秋冬
INSERT INTO tab_set VALUES('c');
INSERT INTO tab_set VALUES('c,x');
INSERT INTO tab_set VALUES('c,q,d');
SELECT * FROM tab_set;
#插入成功,不区分大小写,大写插入,小写入库

四. 日期

 

1.Timestamp支持的时间范围较小,
取值范围:1970010108001--2038年的某个时间
Datetime的取值范围:1000-1-1--9999-12-31
2.timestamp和实际时区有关,更能反映实际的日期,
而datetime则只能反映出插入时的当地时区。
3.timestamp的属性收Mysql版本和SQLMode的影响很大。

建表
CREATE TABLE tab_date(
    t1 DATETIME,
    t2 TIMESTAMP
                );
插入数据
DESC tab_date;

INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date;

查看时区
SHOW VARIABLES LIKE 'time_zone';
本地时区
SET time_zone='+8:00';

修改时区,改为东9区
SET time_zone='+9:00';

再次查询
SELECT * FROM tab_date;

小结:
分类:
date只保存日期
time只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
特点:
字节          范围    时区等影响
datetime     8      1000-9999    不受
timestamp    4      1970-2038

   既然都看到这里了,希望你能有所收获。要不也动动你的小手手也练习一下???

posted @ 2020-08-09 22:23  木卯生十木  阅读(451)  评论(0编辑  收藏  举报