表的数据类型

数值类型

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"
posted @ 2020-02-29 22:42  一起奥利给  阅读(342)  评论(0编辑  收藏  举报