MySQL——SQL语句分类|MySQL数据类型

目录

DDL【data definition language】

DML【data manipulation language】

DCL【Data Control Language】

数据类型

—数据类型分类

——数值类型

tinyint类型

小数类型

float

decimal

字符串类型

char 

varchar

char和varchar比较

如何选择定长或变长字符串?

日期和时间类型

enum和set 

集合查询使用find_ in_ set函数:

find_in_set(sub,str_list) :


DDL【data definition language】

数据定义语言,用来维护存储数据的结构

代表指令: create, drop, alter

DML【data manipulation language】

数据操纵语言,用来对数据进行操作

代表指令: insert,delete,update

DML中又单独分了一个DQL,数据查询语言,代表指令: select

DCL【Data Control Language】

数据控制语言,主要负责权限管理和事务

代表指令: grant,revoke,commit

数据类型

—数据类型分类

——数值类型

tinyint类型

有符号范围 -128 ~ 127

无符号范围 0 ~ 255

小数类型
float

语法:

float[(m, d)] [unsigned] : m指定显示长度,d指定小数位数,占用空间4个字节

案例: 小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL保存值时会四舍五入

比如99.994 存入时还是99.99 但是如果是 99.995 存入时会是100.00 这时候就会报错

浮点数位数过大会有精度丢失(float表示的精度大约是7位)

decimal

语法:

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略, 默认是10。所以如果希望小数的精度高,推荐使用decimal。

字符串类型
char 

语法:

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

注:在这里一个汉字也表示一个字符

varchar

语法:

varchar(L):可变长字符串,L表示字符长度,最大65535字节(不是字符长度)

说明:

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532。 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。

char和varchar比较

如何选择定长或变长字符串?
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。
日期和时间类型

常用的日期有如下三个:

date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节
enum和set 

语法:

enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);
set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);

数据插入的时候,如果用可以用选项名,也可以用选项的下标位置,enum从1开始,

set采用二进制,1表示有这个选项,0表示没有,例如我要插入的set类型有选项12,二进制就是011,也就是十进制3;

集合查询使用find_ in_ set函数:
find_in_set(sub,str_list) :

如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。

在查询带有set属性的数据时,用select语句只能绝对查询数据(例我要查询带有选项1的所有数据,用select* from 表名 where =‘选项一’ ),就只会显示选项1一个

而用find_ in_ set就可以查询所有的相关数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷帅且洋仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值