MySQL进阶12-- 数据类型介绍: 数值型/字符型/日期型-- 正负溢出保护/枚举型/set型/时间戳

时间:2021-01-16 11:15:44
/*进阶12
SQL 数据类型介绍
数值型:
整数: Tinyint(1b) < mediumint(3b)<smallint(2b) <int(4b) <bigint(8b)
( 默认有符号;
1/无符号类型:int unsigned; 正数轴长度加一倍;
2/如果插入的数据超出了规定的返回,则返回临界值
3/如果不设置长度,会有默认的长度;长度代表了显示的最大宽度,如果不够会用0在左边,但必须搭配zerofill填充!
--------------------) 小数: 1)....(M,D): M表示整数部位长度,D表示小数1部位长度;
2)M溢出后表示为9999.999; 定点数: dec(M,D),decimal(M,D),
1.默认为decimal(10,0)
2.精度更高,比如货币运算等运算则考虑使用
浮点数:
1.float(M,D) ,浮点数类型,4 个字节;
2.double(M,D) ,8个字节
枚举型: enum(...........);不区分大小写;
set 类型 : 不区分大小写,set类型最多里面可以保存0~64 个成员; ------------------- 字符型:
较短的文本:char(M:0--255) : (M可以省略,默认为1)可插入字符数上限 ,效率高,空间开支大
varchar(M:0--65535) : (M不可以省略)可变的字符数长度 ,效率低,空间相对低
较长的文本:text / blob(较长的二进制数据)
其他:
binary 和 varbinary用于保存较短的二进制;
enum 用于保存枚举
set用于保存集合
日期型:
date : 4b,仅保存年月日: 1000-01-01 , 9999-12-31
time : 仅保存时分秒
datetime : 8b ,不受时区影响, 最小值:1000-01-01 00:00:00 ,最大值:9999-12-31 23:59:59
timestamp(时间戳): 4b, 随时区改变而改变, 1970年-->2038年 */
    #1 溢出保护
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT,
t2 INT UNSIGNED );
INSERT INTO tab_int VALUES(100000000000000,-100); #2147483647,0
DESC tab_int;
SELECT * FROM tab_int;
#2 设置位数,0填充宽度
CREATE TABLE tab2_int(
t1 INT(7) ZEROFILL,
t2 INT(7) UNSIGNED ZEROFILL );
INSERT INTO tab2_int VALUES(123,123); # 0000123 , 0000123
DESC tab2_int;
SELECT * FROM tab2_int;
#3 测试溢出
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DECIMAL(5,2)
); SELECT * FROM tab_float;
INSERT INTO tab_float VALUE(123.456,123.4444,123.55); #123.46,123.44,123.55
INSERT INTO tab_float VALUE(123.456,123.4444,123456.55); #123.46,123.44,999.99 #4 测试enum 枚举型
CREATE TABLE tab_char(
row1 ENUM('a','b','c','d')
);
INSERT INTO tab_char VALUES('a'); #a
INSERT INTO tab_char VALUES('M'); #' '
INSERT INTO tab_char VALUES('A'); #'a'
SELECT * FROM tab_char; #5 测试set 集合类型
DROP TABLE IF EXISTS tab_set;
CREATE TABLE tab_set(
row1 SET('a','b','c','d')
);
INSERT INTO tab_set VALUES('a,c,d'); #a SELECT * FROM tab_set; #四:日期型 CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_date VALUES(NOW(),NOW()); #2018-10-29 15:13:24,2018-10-29 15:13:24
SELECT * FROM tab_date; SHOW VARIABLES LIKE 'time_zone'; SET time_zone='+9:00'; # 2018-10-29 15:13:24 ,2018-10-29 16:13:24