mysql8.0.19基础数据类型详解
作者:我们的心隔着一片海 发布时间:2024-01-25 22:38:57
标签:mysql8.0.19,数据类型
mysql基础数据类型
mysql常用数据类型概览
![1036857-20170801181433755-146301178](D:\笔记\mysql\复习\1036857-20170801181433755-146301178.png)1. 数字:
整型:tinyinit int bigint
小数:
float :在位数比较短的情况下不精准
double :在位数比较长的情况下不精准
0.000001230123123123
存成:0.000001230000
decimal:(如果用小数,则用推荐使用decimal)
精准
内部原理是以字符串形式去存
2. 字符串:
char(10):简单粗暴,浪费空间,存取速度快
root存成root000000
varchar:精准,节省空间,存取速度慢
sql优化:创建表时,定长的类型往前放,变长的往后放
比如性别 比如地址或描述信息
>255个字符,超了就把文件路径存放到数据库中。
比如图片,视频等找一个文件服务器,数据库中只存路径或url。
3. 时间类型:
最常用:datetime
4. 枚举类型与集合类型
数值类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAIxWM9Z-1585063057990)(D:\笔记\mysql\复习\1036857-20170801181433755-146301178.png)]
1、整数类型
整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
作用:存储年龄,等级,id,各种号码等
整型类型测试
默认是有符号的
mysql> create table t1(money tinyint); #注意,创建表时最后一个字段后面不能有逗号,错误写法mysql> create table t1(money tinyint,);
mysql> insert into t1 values(11);
Query OK, 1 row affected (0.28 sec)
mysql> select * from t1;
mysql> insert into t1 values(-10);
Query OK, 1 row affected (0.11 sec)
mysql> select * from t1;
mysql> insert into t1 values(-200);
Query OK, 1 row affected, 1 warning (0.10 sec)
mysql> select * from t1;
设置了数据类型,会有一个约束效果,只能表示自己范围内的数
创建 无符号数值类型 的写法:
mysql> create table t2(id tinyint unsigned);
2、浮点型
浮点类型:float double
作用:存储薪资、身高、温度、体重、体质参数等
测试
mysql> create table t3(id float(60,30)); # 60代表小数位+整数位总数
Query OK, 0 rows affected (1.70 sec) # 30表示小数位最高30位
mysql> create table t4(id double(60,30));
Query OK, 0 rows affected (0.88 sec)
mysql> create table t5(id decimal(60,30)); # decimal能够存储精确值的原因在于其内部按照字符串存储。
Query OK, 0 rows affected (0.96 sec)
mysql> insert into t3 values(1.1111111111111111111111);
Query OK, 1 row affected (0.13 sec)
mysql> insert into t4 values(1.1111111111111111111111);
Query OK, 1 row affected (0.22 sec)
mysql> insert into t5 values(1.1111111111111111111111);
Query OK, 1 row affected (0.09 sec)
mysql> select * from t3;
mysql> select * from t4;
mysql> select * from t5;
1.创建表
create table t2(f1 float(5,2),f2 float,f3 double(5,2),f4 double);
float(5,2) 保留两位小数 并且四舍五入
double(5,2)
2.写入数据
insert into t2 values(5.2336,5.2336,5.336,5.2336);
3.查看表中数据
select * from t2;
4.指定写入数据
insert into t2(f2,f4) values(5.1783682169875975,5.1783682169875975);
insert into 表名(字段1,字段3) values (值1,值3);
1.创建t3表
create table t3(f1 float,d1 double,d2 decimal(30,20),d3 decimal);
2.查看表结构
desc t3;
3.写入数据
insert into t3 values(5.1783682169875975179,5.1783682169875975179,5.1783682169875975179,5.1783682169875975179);
int--------不约束长度,最多表示10位数
float(m,n)m-----一共多少位 n-----小数部分多少位
日期类型
类型:DATE,TIME,DATETIME ,IMESTAMP,YEAR
作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等
mysql> create table t6(d1 year ,d2 date,d3 datetime);
Query OK, 0 rows affected (1.75 sec)
mysql> insert into t6 values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.12 sec)
mysql> select * from t6;
字符串类型
char和varchar性能对比:
以char(5)和varchar(5)来比较,加入我要存三个人名:sb,ssb1,ssbb2
char:
优点:简单粗暴,不管你是多长的数据,我就按照规定的长度来存,5个5个的存,三个人名就会类似这种存储:sb ssb1 ssbb2,中间是空格补全,取数据的时候5个5个的取,简单粗暴速度快
缺点:貌似浪费空间,并且我们将来存储的数据的长度可能会参差不齐
varchar:
varchar类型不定长存储数据,更为精简和节省空间
例如存上面三个人名的时候类似于是这样的:sbssb1ssbb2,连着的,如果这样存,请问这三个人名你还怎么取出来,你知道取多长能取出第一个吗?
varchar在存数据的时候,会在每个数据前面加上一个头,这个头是1-2个bytes的数据,这个数据指的是后面跟着的这个数据的长度,1bytes能表示2**8=256,两个bytes表示2**16=65536,能表示0-65535的数字,所以varchar在存储的时候是这样的:1bytes+sb+1bytes+ssb1+1bytes+ssbb2,所以存的时候会比较麻烦,导致效率比char慢,取的时候也慢,先拿长度,再取数据。
优点:节省了一些硬盘空间,一个acsii码的字符用一个bytes长度就能表示,但是也并不一定比char省,看一下官网给出的一个表格对比数据,当你存的数据正好是你规定的字段长度的时候,varchar反而占用的空间比char要多。
ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required
''' '4 bytes''1 byte
'ab''ab '4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefgh''abcd'4 bytes'abcd'5 bytes
缺点:存取速度都慢
对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。
适合使用char:
身份证号、手机号码、QQ号、username、password、银行卡号
适合使用varchar:
评论、朋友圈、微博
1.创建表
create table t6(c1 char(1),v1 varchar(1),c2 char(8),v2 varchar(8));
2.写入数据
insert into t6 values('alexq','alexq','alexq','alexq');
3.查询表中数据
select * from t6;
枚举和集合类型
enum:单选行为------枚举类型
只允许从值集合中选取单个值,而不能一次取多个值
1.创建表
create table t8(id int, name char(18),gender enum('male','female'));
2.写入数据
insert into t8 values(1,'alex','不详'); ---------不详无法写入
3.查询表中数据
select * from t8;
4.写入数据
insert into t8 values(1,'alex','male');-------------male可以写入
5.查询表中数据
select * from t8;
2.写入数据
insert into t8 values(1,'alex','female');------------female可以写入
3.查询表中数据
select * from t8;
set:
多选行为
可以**允许值集合中任意选择1或多个元素进行组合**。对超出范围的内容将不允许注入,而对重复的值将进行自动去重。
1.创建表
create table t9(id int,name char(18),hobby set('抽烟','喝酒','洗脚','按摩','烫头'));
2.写入数据
insert into t9 values(1,'太白','烫头,抽烟,喝酒,按摩‘);
3.查询表中数据
select * from t8;
4.写入数据
insert into t9 values(1,'大壮','洗脚,洗脚,洗脚,按摩,按摩,打游戏‘);
5.查询表中数据
select * from t8;
来源:https://blog.csdn.net/qq_35632689/article/details/105084320
0
投稿
猜你喜欢
- 关于如何区分艺术和设计的话题总是玄之又玄,并因此引发的争论也有很长一段时间。艺术家和设计师都基于相同的知识基础来创作视觉作品,但他们创作的理
- 在大的互联网公司干技术的基本都会碰到测试、预发布、线上这种多套环境的,来实现测试和线上正式环境的隔离,这种情况下,就难免会碰到秀逗了把测试的
- 首先先定义一个list,将其转存为csv文件,看将会报什么错误list=[[1,2,3],[4,5,6],[7,9,9]]list.to_c
- 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01
- 前言:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共
- 本文目的是由浅入深地介绍python装饰器原理装饰器(Decorators)是 Python 的一个重要部分其功能是,在不修改原函数(类)定
- python help使用C:\Users\wusong>pythonPython 3.8.2rc1 (tags/v3.8.2rc1:
- 上篇博客转载了关于感知器的用法,遂这篇做个大概总结,并实现一个简单的感知器,也为了加深自己的理解。感知器是最简单的神经网络,只有一层。感知器
- 如何利用Image Data Type从数据库中读取图片,并在主页中显示图形?然后,写如下代码:< % @&nbs
- Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elas
- html5带给我们的不仅仅是更多语义丰富的标签,还有更多更牛逼的特性,比如“离线存储”。 对于台式电脑来说,或者它并没有带来什么惊喜,但是对
- 通过查看书籍,自己总结了一下,怎样用python代码实现调用笔记本摄像头的功能。这主要是通过opencv中cv2模块来实现这个功能。其中是调
- 本文实例讲述了PHP数据库表操作的封装类及用法。分享给大家供大家参考,具体如下:数据库表结构:CREATE TABLE `test_user
- 本文实例讲述了Python实现检测文件MD5值的方法。分享给大家供大家参考,具体如下:前面介绍过Python计算文件md5值的方法,这里分析
- 在图片中识别足球先补充下霍夫圆变换的几个参数知识:dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像
- 本文实例讲述了python中requests模块的使用方法。分享给大家供大家参考。具体分析如下:在HTTP相关处理中使用python是不必要
- 查询游戏历史成绩最高分前100Sql代码SELECT ps.* FROM cdb_playsgame ps WHERE ps.credits
- 一场大雪,覆盖了华北、华东。天地连成一片,城市银装素裹,处处诗情画意、人人兴高采烈。朋友圈被雪景图和调侃路滑摔跤的段子刷屏,气氛比过年还要热
- 1、python多进程编程背景python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,
- 由于该math模块与 Python 版本一起打包,因此您不必单独安装它,直接导入:import mathmath模块常数Pythonmath