表的数据类型
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
对于小数的表示,MYSQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在mysql中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
int与tinyint 整数
写超过范围的 以边界最大最小的表示 但不报错
设置严格模式报错
unsigned 设置无符号
create table int_t (
ti tinyint, # 范围****(-128,127)
i int, # 范围*****(-2147483648,2147483647)
tiun tinyint unsigned, #无符号(0,255)
iun int unsigned #无符号(0,4294967295)
);
float浮点数
float 保留小数点后5位 # *****单精度
double 保留好多位 但精度还是不高
float(5,2),# 5是总位数 2是小数点后2位 在精确位四舍五入 输入12345 确是999.99
double(5,2)# 在精确位四舍五入
实列
drop database day01;
create database day01;
use day01;
create table d1(
f1 float,
f2 double,
f3 float(5,2),
f4 double(5,2));
insert into d1(f1,f2,f3,f4) values(
1.1233456789,
1.1233456789,
1.1233456789,
1.1233456789
);
desc d1;
select * from d1;
+---------+--------------+------+------+
| f1 | f2 | f3 | f4 |
+---------+--------------+------+------+
| 1.12335 | 1.1233456789 | 1.12 | 1.12 |
+---------+--------------+------+------+
小数值
decimal 默认取整
decimal(30,20)#精确后20位
实列
drop database day01;
create database day01;
use day01;
create table d1(
f1 decimal,
f2 decimal(30,20)
);
insert into d1(f1,f2) values(
1.1233456789,
1.1233456789
);
desc d1;
select * from d1;
+------+------------------------+
| f1 | f2 |
+------+------------------------+
| 1 | 1.12334567890000000000 |
+------+------------------------+
日期时间类型
年月日时分秒
内置函数 now() 获取当前时间
datetime 打卡时间/日志/论坛博客类的评论\文章/***** 年月日时分秒
date 员工生日/入职日期/离职日期/开班时间 *****年月日
time 上课时间/下课时间/规定上班时间 竞赛数据 时间
year 年
timestamp 2038年由于表示范围的问题,导致用的少了 # 不能为空,默认值是当前时间,在修改的时候同时更新时间(uppdet时)
在timestamp后面加上NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP这个约束表示的范围更大,还能拥有timestamp的特点(不能为空,默认值是当前时间,在修改的时候同时更新时间(uppdet时))
举例
create table time_t2(
dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )
添加时间数据
年月日必须写全
第一种数字添加
insert into 表名 values(20180705112222);
第二种字符串添加
insert into 表名 values('2018-07-05 11:22:22');
实列
drop database day01;
create database day01;
use day01;
create table d1(
tim1 datetime,
tim2 date,
tim3 time,
tim4 year
);
#第一种添加方式 now()函数会自动匹配
insert into d1(tim1,tim2,tim3,tim4) values(now(),now(),now(),now());
#第2种手动添加
insert into d1(tim1,tim2,tim3,tim4) values('2018-07-05 11:22:22','2018-07-05 11:22:22','2018-07-05 11:22:22','2019');
select * from d1;
desc d1;
+---------------------+------------+----------+------+
| tim1 | tim2 | tim3 | tim4 |
+---------------------+------------+----------+------+
| 2019-08-30 09:43:05 | 2019-08-30 | 09:43:05 | 2019 |
| 2018-07-05 11:22:22 | 2018-07-05 | 11:22:22 | 2019 |
+---------------------+------------+----------+------+
字符串类型
char与varchar
括号里面是字符不是字节
char定长速度快占用空间大
varchar变长速度相对慢占用空间小
char 0-255字符 定长存储 存储速度更快 占用更多的空间 *****
char(12)
alex --> 'alex ' --> 12的长度
varchar 0-65535字节 变长存储 存储速度慢 占用的空间小 ****
varchar(12)
'alex' --> 'alex4' --> 5的长度
评论 : varchar
# 时间和空间
# 时间换空间
# 空间换时间
LONGTEXT 0-4 294 967 295字节 极大文本数据
实列
create table ch_t(
c char,
c2 char(5),
vc2 varchar(5)
);
insert into ch_t values(
'1','2','3'
);
select * from ch_t;
+------+------+------+
| c | c2 | vc2 |
+------+------+------+
| 1 | 2 | 3 |
+------+------+------+
enum单选set多选
枚举 集合
单选题,只能从有限的条件中选择
多选题,从有限的条件中选
乱写为空 如果要乱写报错 就设置约束
多写多次只显示一次
create database day01;
use day01;
create table a1(
id int,
name char(12),
gender enum('男','女'),
hobby set('吃','喝','玩','乐')
);
insert into a1 values
(1,'小强','男','吃,喝'),
(2,'小久','男','吃,乐'),
(3,'小三','男','吃,乐')
;
desc a1;
show create table a1;
select * from a1;
总结
数值类型
int 范围大
tinyint 范围小
float浮点数 精度小 常用
decimal小数值 精度大 不常用
时间日期类型
datetime年月日时分秒
date年月日
time时间
year年
字符串类型
char定长速度快占用空间大 存储范围小
varchar变长速度相对慢占用空间小 存储范围大
选择类型
enum单选
set多选
设置严格模式
设置严格模式:
不支持对not null字段插入null值
不支持对自增长字段插入”值
不支持text字段有默认值
直接在mysql中生效(重启失效):
mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
配置文件添加(永久失效):
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
非学,无以致疑;非问,无以广识