博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL数据库----数据类型
阅读量:5953 次
发布时间:2019-06-19

本文共 4883 字,大约阅读时间需要 16 分钟。

首先补充点了解的小知识;

select * from mysql.user  #显示出来乱了select * from mysql.user\G  #加了\G后一行一行显示了

一、数据类型:分不同种类去存不同类型的数据

存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的

1、数字(默认是有符号的)

数字又分为:

  整型:tinyint(小整型):一个字节

     int(整型):四个字节。注意:int的 宽度指的是显示的宽度,与存储无关

     bigint(大整形):八个字节

========================================        tinyint[(m)] [unsigned] [zerofill]            小整数,数据类型用于保存一些范围的整数数值范围:            有符号: -128 ~ 127            无符号:0~ 255            PS: MySQL中无布尔值,使用tinyint(1)构造。
[unsigned]参数和[zerofill]参数的应用
3.将有符号的修改为无符号的:alter table t1 modify unsigned;(注意,如果里面有值了,                                   得把里面的值清空了再修改) 4.alter table t2 modify id int(10) zerofill; 如果显示不够,就用zerofill填充
========================================        int[(m)][unsigned][zerofill]            整数,数据类型用于保存一些范围的整数数值范围:            有符号: -2147483648 ~ 2147483647            无符号:0~ 4294967295========================================        bigint[(m)][unsigned][zerofill]            大整数,数据类型用于保存一些范围的整数数值范围:            有符号:-9223372036854775808 ~ 9223372036854775807            无符号: 0~  18446744073709551615

 

  小数:

     float:在位数比较短的情况下不精准(**** 数值越大,越不准确 ****)

     double:在位数比较长的情况下不精准(**** 数值越大,越不准确 ****)

     decimal:如果是小数,则推荐使用decimal

           因为精准,内部原理是以字符串的形式去存

  

先创建一个数据库:create datdabase test;-----------验证1:int,tinyint,bigint----create table t1(id tinyint);create table t1(id int);create table t1(id bigint);  #如果数字比较大的时候就用bigint1.如果没有指定符号。默认的是有符号的2.insert into t1(-129) #就会报错了,因为范围是-128~1273.将有符号的修改为无符号的:alter table t1 modify unsigned;(注意,如果里面有值了,得把里面的值清空了再修改)4.alter table t2 modify id int(10) zerofill; 如果显示不够,就用zerofill填充5.宽度:跟存的没有关系,指的是显示的宽度----------验证2:float,double------create table t3(salary float(5,2)) #5代表salary总共多宽,2代表小数点后保留2位,那么整数部分有3位insert into t3 values(3.725454);insert into t3 values(-3.725454);insert into t3 values(1111.725454);  #像这个就会报错了insert into t3 values(111.725454);bit类型了解就好了bit类型:代表二进制的类型----------验证3:bit--------create table t3(x bit);insert into t3 values(0),(1);insert into t3 values(0),(2)); #只能存二进制的,这样的话就会报错select * from t3;
验证数字

最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok

2、字符、

char:简单粗暴,不够就用空格凑够固定长度存放起来,浪费空间,但是存储速度快     (牺牲空间,提高速度) varchar(你有几个就存几个):精准,计算出待存放数据的长度,节省空间,存取速度慢         (牺牲速度,提高效率)

  1.-----------------

  create table t6(name char(4));

  insert into t6 values('alexsb');
  insert into t6 values('欧德博爱');
  insert into abc values('艾利克斯a');

2.-------------  create table t7(x char(5),y varchar(5)); insert into t7 values('sff','aaaaa'); select char_length(x),char_length(y) from t7; 查看字符长度 set sql_mode='pad_char_to_full_length';   #打回原形 insert into t7 values('你好啊','好好好!');#utf-8里面一个汉字代表三个字节,那'你好啊'就代表九个,                           #加上两个空格就是11个字节 select length(x),length(y) from t7; 查看字节长度

  查看字符的长度

 

查看字节的长度

3、日期

作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等

有下面几种类型:

datatime:2017-09-06 10:30:22

data:2017-09-06
time:10:30:22
year:2017
timeatamp:和datatime是一样的,就是支持的范围datatime的大

---------------验证4:日期类型-------create table stu(id int,name char(5),born_data date,born_year year,reg_time datetime,class_time time);insert into stu values(1,'ao',now(),now(),now(),now());insert into stu values(1,'xiao','2017-09-06','2017','2017-09-06 10:39:00','08:30:00');#了解insert into stu values(1,'alex','2017-09-06',2017,'2017-09-06 10:39:00','08:30:00');insert into stu values(1,'alex','2017/09/06',2017,'2017-09-06 10:39:00','08:30:00'); 没有-的可以不用加引号insert into stu values(1,'alex','20170906',2017,'20170906103900','083000'); 也可以吧符号取了连写
============注意啦,注意啦,注意啦===========1. 单独插入时间时,需要以字符串的形式,按照对应的格式插入2. 插入年份时,尽量使用4位值3. 插入两位年份时,<=69,以20开头,比如50,  结果2050                      >=70,以19开头,比如71,结果1971MariaDB [db1]> create table t12(y year);MariaDB [db1]> insert into t12 values      -> (50),    -> (71);MariaDB [db1]> select * from t12;+------+| y    |+------+| 2050 || 1971 |+------+
在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
datdatime 和 timestamp的区别

4、枚举与集合

字段的值只能在给定范围中选择,如单选框,多选框

enum枚举:规定一个范围:这个范围可以有多个,但是为该字段传值时,只能取规定范围内的其中一个

set集合:规定一个范围:这个范围可以有多个,但是为该字段传值时,可以取规定范围内的一个或多个
enum如果你不传值,默认是第一个值,或者为NUll

----------枚举和集合-----------create table stu1(id int primary key auto_increment,name char(5),sex enum('male','female'), #enum 代表枚举类型hobbies set('eat','play','study','coding') #set 代表集合类型);insert into stu1(name,sex,hobbies) values('haiyan','none','dsfdg');select * from stu1;  #如果设置了sex是枚举类型,就的从设定的里面选其中的一个存insert into stu1(name,sex,hobbies) values('haiyan','female','play,study');select * from stu1;  #如果设置了hobbies是集合类型,就得从设定的里面选其中一个或者多个值来存

没有按照枚举或集合规定的传值的结果

按照枚举或集合的规定传值的结果

 

 

转载于:https://www.cnblogs.com/TheLand/p/8474604.html

你可能感兴趣的文章
zabbix监控进程的CPU和内存占用量
查看>>
1.2 未来人人皆微商
查看>>
基于jquery.fixedheadertable 表格插件左侧固定 对齐
查看>>
宏正ATEN推出ALTUSEN全系列IP-Based远程机房管理方案
查看>>
剑指Offer(Java版):把字符串转换成整数
查看>>
ant之property关键字
查看>>
吃货少女走关西,美食小店大盘点
查看>>
C#学习基础---BrowsableAttribute.Browsable属性
查看>>
关于树的前序遍历,中序遍历,后序遍历的相互转化(含代码实现)
查看>>
分享一些android的资料 很实用
查看>>
Python加密保护-对可执行的exe进行保护
查看>>
android Bundle的作用
查看>>
后台系统上传文件回显上传进度条
查看>>
mysql 从库升级为主库的步骤
查看>>
inode满处理
查看>>
linux 定时任务 crond 服务介绍
查看>>
我和51CTO的缘分【我与51CTO一“七”成长】
查看>>
陈松松:知道这5个视频营销流量入口,你不缺流量
查看>>
Git 忽略文件
查看>>
Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程
查看>>