数值型之整数

-- 测试整型,范围是-128~127CREATE TABLE test_int( a tinyint, b smallint, c mediumint, d int, e bigint);-- 正常插入INSERT test_int(a) VALUES(-128);-- 插入报错INSERT test_int(a) VALUES(-129); -- 报错INSERT test_int(a) VALUES(128); -- 报错
数值型之浮点数

- 如果超出小数点后的位数,会进行四舍五入
- FLOAT和DOUBLE四舍五入之后不会报警告,DECIMAL四舍五入之后会报警告
- 如果不指定小数点后的位数,DECIMAL默认四舍五入之后显示整数
-- 测试浮点
CREATE TABLE test_float(
a FLOAT(6,2),
b DOUBLE(6,2),
C DECIMAL(6,2)
);
-- 进行了四舍五入处理
-- a和b不会报警告,c会报警告
INSERT test_float(a,b,c) VALUES(4.143,4.146,4.149); -- 结果为:| 4.14 | 4.15 | 4.15 |
注意:如果不指定DECIMAL的小数点后位数,默认四舍五入之后显示整数
CREATE TABLE test_float1(
a FLOAT,
b DOUBLE,
C DECIMAL
);
-- 结果为4.143,4.146,4
INSERT test_float1(a,b,c) VALUES(4.143,4.146,4.149);
-- 结果为4.143,4.146,5
INSERT test_float1(a,b,c) VALUES(4.143,4.146,4.649);
字符串类型
CHAR
- 定长字符串,空间固定,查询速度较快
- 存储数据的时候,后面会用空格填充到指定长度
- 在检索的时候会去掉后面的空格
VARCHAR
- 变长字符串,空间根据实际字符串的长度可变,查询速度较慢
- 存储数据的时候,后面不会用空格填充
- 在检索的时候不会去掉后面的空格(如果字符串本身就有的话)
-- 测试char 和 varchar
CREATE TABLE test_str(
a CHAR(5),
b VARCHAR(5)
);
INSERT test_str(a,b) VALUES('',''); -- 结果为:| | |
INSERT test_str(a,b) VALUES('a','a'); -- 结果为:| a | a |
INSERT test_str(a,b) VALUES('ab','ab'); -- 结果为:| ab | ab |
INSERT test_str(a,b) VALUES('abc','abc'); -- 结果为:| abc | abc |
INSERT test_str(a,b) VALUES('abcd','abcd'); -- 结果为:| abcd | abcd |
INSERT test_str(a,b) VALUES('abcde','abcde'); -- 结果为:| abcde | abcde |
INSERT test_str(a,b) VALUES(' 123 ',' 123 ');
SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str; -- 结果为:| * 123* | * 123 * |
TEXT
- 不能有默认值
- 检索的时候不存在大小写转换
-- 以下会报错
CREATE TABLE test_str1(
content TEXT DEFAULT 'THIS IS A TEST'
);
ENUM
- 只能插入枚举列表中的一个值
- 可以插入NULL
- 可以根据编号插入,ENUM的编号以1开始
- 会自动过滤掉空格
-- 测试ENUM(枚举)
CREATE TABLE test_enum(
sex ENUM('男','女','保密')
);
INSERT test_enum(sex) VALUES('男'); -- | 男 |
INSERT test_enum(sex) VALUES('男1'); -- 会报错
INSERT test_enum(sex) VALUES(NULL); -- | NULL |
INSERT test_enum(sex) VALUES(1); -- | 男 |
INSERT test_enum(sex) VALUES(3); -- | 保密 |
INSERT test_enum(sex) VALUES(5); --会报错
SET
- 可以插入集合列表中的多个值
- 可以插入NULL
- 可以根据编号插入,SET的编号以1开始
- 会自动过滤掉空格
- 常用于权限分配
--测试SET(集合)
CREATE TABLE test_set(
a SET('A','B','C','D','E','F')
);
INSERT test_set(a) VALUES('A'); -- | A |
INSERT test_set(a) VALUES('B'); -- | B |
INSERT test_set(a) VALUES('C'); -- | C |
INSERT test_set(a) VALUES('D,E'); -- | D,E |
INSERT test_set(a) VALUES('F,D,B'); -- | B,D,F |
INSERT test_set(a) VALUES('C,F,A,H'); --会报错
INSERT test_set(a) VALUES(2); -- | B |
INSERT test_set(a) VALUES(NULL); -- | NULL |
日期时间类型

TIME
--HH:MM:SS [D HH:MM:SS] D表示天数 0~34 例:2 3:23:45 → 51:23:45
--测试TIME类型
-- -838:59:59 ~ 838:59:59
CREATE TABLE test_time(
a TIME
);
INSERT test_time(a) VALUES('12:23:45'); -- | 12:23:45 |
INSERT test_time(a) VALUES('2 12:23:45'); -- | 60:23:45 |
INSERT test_time(a) VALUES('22:22'); -- | 22:22:00 |
INSERT test_time(a) VALUES('22'); -- | 00:00:22 |
INSERT test_time(a) VALUES('2 22'); -- | 70:00:00 |
--HHMMSS
INSERT test_time(a) VALUES('121212'); -- | 12:12:12 |
INSERT test_time(a) VALUES('0'); -- | 00:00:00 |
INSERT test_time(a) VALUES(0); -- | 00:00:00 |
INSERT test_time(a) VALUES('787878'); -- 会报错
--使用系统函数
INSERT test_time(a) VALUES(NOW()); -- | 16:09:20 |
INSERT test_time(a) VALUES(CURRENT_TIME); -- | 16:09:21 |
DATE
--测试DATE类型 YYYY-MM-DD YYYYMMDD
--1000.01.01 ~ 9999.12.31
CREATE TABLE test_date(
a DATE
);
INSERT test_date(a) VALUES('2017-03-04');
INSERT test_date(a) VALUES('2017-2-13');
INSERT test_date(a) VALUES('4007-03-23');
INSERT test_date(a) VALUES('40071212');
INSERT test_date(a) VALUES('4007@12@12');--mysql支持不严格的分隔符
INSERT test_date(a) VALUES('4008#12#12');--mysql支持不严格的分隔符
INSERT test_date(a) VALUES('4009.12.12');--mysql支持不严格的分隔符
--YY-MM-DD YYMMDD
--70~99:转换成1970~1999
--00~69:转换成2000~2069
INSERT test_date(a) VALUES('780902'); --1978.09.02
INSERT test_date(a) VALUES('650902'); --2065.09.02
--使用系统函数
INSERT test_date(a) VALUES(NOW());
INSERT test_date(a) VALUES(CURRENT_DATE);
DATETIME
CREATE TABLE test_datetime(
a DATETIME
);
INSERT test_datetime(a) VALUES('1004-09-12 13:24:56'); -- | 1004-09-12 13:24:56 |
INSERT test_datetime(a) VALUES('720305121212'); -- | 1972-03-05 12:12:12 |
INSERT test_datetime(a) VALUES(NOW()); -- | 2019-09-06 16:15:21 |
TIMESTAMP
--测试TIMESTAMP
--1970.01.01 00:00:00 UTC ~ 2038.01.19 03:14:07
CREATE TABLE test_timestamp(
a TIMESTAMP
);
INSERT test_timestamp(a) VALUES('1978-10-23 12:12:12'); -- | 1978-10-23 12:12:12 |
INSERT test_timestamp(a) VALUES('1278-10-23 12:12:12'); -- 报错
INSERT test_timestamp(a) VALUES(CURRENT_TIMESTAMP); -- | 2019-09-06 16:19:03 |
INSERT test_timestamp(a) VALUES(NULL); -- NULL
INSERT test_timestamp(a) VALUES(); -- 报错
YEAR
--测试YEAR
--1901~2155
--70~99:转换成1970~1999
--00~69:转换成2000~2069
CREATE TABLE test_year(
a YEAR
);
INSERT test_year(a) VALUES(1901); -- 1901
INSERT test_year(a) VALUES(0); -- 0000
INSERT test_year(a) VALUES('0'); -- 2000