ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL 数据类型

2021-10-22 21:05:00  阅读:182  来源: 互联网

标签:01 name 数据类型 JSON table1 SQL 类型 properties


数据类型

整数类型

关键词最大长度
TINYINT[-128, 127]
UNSIGNED TINYINT[0, 255]
SMALLINT[-32k, 32k]
MEDIUMINT[-8M, 8M]
INT[-2B, 2B]
BIGINT[-9Z, 9Z]

整数类型多为定长换句话说,如果你定义了一个长度为3的INT类型,输入一个1会默认前边加两个0。也就是占了额外的空间开销。所以如果你需要存储一个人的年龄可以尽量使用UNSIGNED TINYINT

浮点数类型

DECIMAL(p,s),p的范围为1-65,s是小数点后的位数。

如果你定义了一个DECIMAL(6,2)指的是小数点前4位,小数点后2两位。

有的数据库中也是用DEC/NUMERIC/FIXED等来代替DECIMAL

双精度的浮点数常用于进行科学计算。他们并不存储准确值。有两个FLOAT/DOUBLE前者占四字节,后者占八字节。

字符串类型

关键字最大长度
CHAR
VARCHAR64KB(65,535)
TINYTEXT255bytes
TEXT64KB
MEDIUMTEXT16MB
LONGTEXT4GB

下面是一些我写代码的小技巧:

非定长数据的短字符串设置长度为VARCHAR(50)(用户名,密码),长字符串设置为VARCHAR(255)(地址,简介)。

类型是支持国际字符的其中英文占一个字符,中文UNIONCODE占两个字符,UTF8占三个字符。

在一定的长度范围内我们最好采用VARCHAR类型,因为VARCHAR类型可以被编入索引之中。

布尔类型

BOOL/BOOLEAN,都可以用来表示真假。

我们用TRUE或者1来表示真的,FLASE或者0表示假的。

我一般用TINYINT来存储状态,令1表示存在,0表示不存在。

日期类型

关键词解释例子
DATE日期2021-01-01
TIME时间01:02:03
TIMESTAMP时间戳因为长度问题只能到2038年
DATETIME日期加时间2021-01-01 01:02:03

枚举类型

比如我们有一个型号字段只能有三个值small,medium,big

我们就需要通过ENUM('small','medium','big')的方式定义该字段。

个人感觉枚举类型要尽量少用。原因是因为后续想要改变它的组成可能要颇费功夫。你可以通过建立型号表与连接表来实现这个功能,并且使用更加灵活。

集合类型

SET换掉ENUM就是集合了。同样不推荐使用。

二进制类型

主要是为了将音频视频等文件类型化作二进制存取。

关键词大小
TINYBLOB255b
BLOB65KB
MEDIUMBLOB16MB
LONGBLOB4GB

我并没有用过这个数据类型,我觉得文件应该存在他们应该存在的地方,此处使用可能会增加数据库的负担。

甚至可能要写一系列的代码将文件先转化为数据库。

JSON类型

这个类型是MySQL8以后存在的,对JSON类型有所了解的人应该知道这个是干嘛的,它可以用于存储对象。

个人喜欢用它来放配置文件。

update table1
set properties=JSON_OBJECT(
    'key1', 10,
    'key2', JSON_ARRAY(1,2,3),
    'key3', JSON_OBJECT('name','wang')
)
where id=1;

JSON_ARRAY()会解析为JSON数组,JSON_OBJECT()解析为JSON对象。

select id,JSON_EXTRACT(properties,'$.key1'),JSON_EXTRACT(properties,'$.key2[0]'),JSON_EXTRACT(properties,'$.key3.name')
from table1;
--简写
select id,properties->'$.key1',properties->'$.key3.name',properties->>'$.key3.name'
from table1;

JSON_EXTRACT()方法可以解析JSON串获取对象,第一个参数是字段名,第二个参数是想要查询的键名(会返回值)。$相当于这段json对象。

双箭头可以去掉查询到的字符串的双引号。

更改JSON值

update table1
set properties=JSON_SET(
    properties,
    '$.key1', 12,
    '$.key2',
    '$.key4', "22"
)
where id=1;

JSON_SET的第一个参数是字段名,后边是需要更改的键路径紧跟着是它的值。

注意,已经存在的键会更新值,不存在的键会增加进去。如果一个键路径后边并没有跟值,那就会删去这个键。

标签:01,name,数据类型,JSON,table1,SQL,类型,properties
来源: https://blog.csdn.net/m0_50210478/article/details/120913251

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有