MYSQL初阶学习笔记——常见的数据类型
#常见的数据类型
/*
数值型
整型
小数:
定点数
浮点数
字符型
较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)
日期型
选择类型的原则:
所选择的类型越简单越好,能保存数值的类型越小越好
*/
#一、整型
/*
分类:
tinyint、smallint、mediumint、int/integer、bigint
字节:1 2 3 4 8
特点:
a.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
b.如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
c.如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!
*/
#二、小数
/*
浮点型:
float(M,D) double(M,D)
4 8
定点数:(8字节,精度更好)
dec(M,D) decimal(M,D)
特点:
a. M和D
M:整数部位+小数部位的个数
D:小数部位
如果超过范围,则插入临界值
b.M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则根据插入数值精度决定M和D
c.定点型相对精度较高
*/
#三、字符型
/*
较短的文本:char(M) varchar(M)
较长的文本:text blob(较大的二进制)
binary varbinary enum set
M:最多字符数;
对比:
写法 M的意思 特点
char char(M) 最大字符数 固定长度的字符,耗费空间,效率高
默认为1 (设置为多少就是多少)
varchar varchar(M) 最大字符数 可变长度的字符,节省空间,效率低
不可省略 (根据实际插入字符长度而定,但不超过设置长度)
*/
#扩展:enum 枚举类型;set 集合类型
USE test;
CREATE TABLE tab_char(
ci ENUM('a','b','c')#每次插入只能是其中一个
);
INSERT INTO tab_char VALUE('a');
INSERT INTO tab_char VALUE('v');#不在枚举内不会出现
DROP TABLE tab_str;
CREATE TABLE tab_str(
si SET('a','b','c')#每次插入可插入其中多个
);
INSERT INTO tab_str VALUE('a');
INSERT INTO tab_str VALUE('a,b');
INSERT INTO tab_str VALUE('a,b,c');
INSERT INTO tab_str VALUE('a,b,v');#不在枚举内不会出现
#四、日期型
/*
字节
date 4 日期
time 3 时间
year 1 年
datetime 8 日期+时间
timestamp 4 日期+时间
区别:
字节 范围 是否受时区影响
datetime 4 1000-9999 不受
timestamp 8 1970-2038 受
*/
CREATE TABLE tab_time(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_time VALUE(NOW(),NOW());
SELECT * FROM tab_time;
SHOW VARIABLES LIKE 'time_zone';
SET time_zone='+9:00';
/*
数值型
整型
小数:
定点数
浮点数
字符型
较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)
日期型
选择类型的原则:
所选择的类型越简单越好,能保存数值的类型越小越好
*/
#一、整型
/*
分类:
tinyint、smallint、mediumint、int/integer、bigint
字节:1 2 3 4 8
特点:
a.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
b.如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
c.如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!
*/
#二、小数
/*
浮点型:
float(M,D) double(M,D)
4 8
定点数:(8字节,精度更好)
dec(M,D) decimal(M,D)
特点:
a. M和D
M:整数部位+小数部位的个数
D:小数部位
如果超过范围,则插入临界值
b.M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则根据插入数值精度决定M和D
c.定点型相对精度较高
*/
#三、字符型
/*
较短的文本:char(M) varchar(M)
较长的文本:text blob(较大的二进制)
binary varbinary enum set
M:最多字符数;
对比:
写法 M的意思 特点
char char(M) 最大字符数 固定长度的字符,耗费空间,效率高
默认为1 (设置为多少就是多少)
varchar varchar(M) 最大字符数 可变长度的字符,节省空间,效率低
不可省略 (根据实际插入字符长度而定,但不超过设置长度)
*/
#扩展:enum 枚举类型;set 集合类型
USE test;
CREATE TABLE tab_char(
ci ENUM('a','b','c')#每次插入只能是其中一个
);
INSERT INTO tab_char VALUE('a');
INSERT INTO tab_char VALUE('v');#不在枚举内不会出现
DROP TABLE tab_str;
CREATE TABLE tab_str(
si SET('a','b','c')#每次插入可插入其中多个
);
INSERT INTO tab_str VALUE('a');
INSERT INTO tab_str VALUE('a,b');
INSERT INTO tab_str VALUE('a,b,c');
INSERT INTO tab_str VALUE('a,b,v');#不在枚举内不会出现
#四、日期型
/*
字节
date 4 日期
time 3 时间
year 1 年
datetime 8 日期+时间
timestamp 4 日期+时间
区别:
字节 范围 是否受时区影响
datetime 4 1000-9999 不受
timestamp 8 1970-2038 受
*/
CREATE TABLE tab_time(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_time VALUE(NOW(),NOW());
SELECT * FROM tab_time;
SHOW VARIABLES LIKE 'time_zone';
SET time_zone='+9:00';