我在广州学 Mysql 系列之 数据类型和运算符详解

news2024/12/20 4:10:08

ℹ️大家好,我是😆练小杰,今天主要学习 Mysql的数据类型以及运算符操作~~
上周五学习了“Mysql 系列之 数据“表”的基本操作”~
想要了解更多🈶️MYSQL 数据库的命令行总结!!!

“我是你的敌人,但也会是你的朋友。”——怪盗基德

在这里插入图片描述

文章目录

  • MySQL数据类型
    • 整数类型
    • 浮点数类型和定点数类型
      • 浮点类型
      • 定点类型:DECIMAL
    • 日期与时间类型
    • 字符串类型
      • char 和 varchar类型
      • text类型
      • ENUM 和 SET类型
    • 二进制类型
      • BINARY 和 VARBINARY
      • BLOB类型
  • 如何选择数据类型
    • 由数据类型性质选择
    • 由存储空间和性能选择
    • 由查询性能选择
  • 运算符
    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 运算符的优先级
  • 综合案例(小练习)
    • 实验目的
    • 实验步骤

在这里插入图片描述

MySQL数据类型

首先,在博客<<我在广州学 Mysql 系列之梦的开始>>中已经讲过Mysql数据类型的相关概念,本文就不过多重复了!!!下面,我们就从用途入手讲讲每个类型的区别。

数据类型主要包含以下五种:

  • 整数类型
  • 浮点数类型和定点数类型
  • 日期与时间类型
  • 字符串类型
  • 二进制类型

整数类型

  • 数值型数据类型主要用来存储数字

TINYINT :适用于存储非常小的整数,比如状态标志或枚举值
SMALLINT :适用于存储较小的整数,比如库存数量
MEDIUMINT:适用于存储中等大小的整数,比如每日访问量
INT(或INTEGER):适用于存储大多数整数数据,比如用户id或订单号
BIGINT :适用于存储非常大的整数,例如交易量或高精度计数

浮点数类型和定点数类型

浮点类型

FLOAT : 适用于对精度要求不高的场景,如科学计算
DOUBLE: 适用于需要更高精度的场景,如金融计算

⚠️注意:浮点数类型存储的是近似值,可能会出现精度误差;同时,在进行浮点数比较,可能会因为精度的问题导致意外结果

定点类型:DECIMAL

  • 定点数类型以字符串形式存储,确保数据的精确性
  • 定义方式:DECIMAL(M, D),其中M表示总位数D表示小数位数
  • 取值范围:取决于MD的值。例如:DECIMAL(5, 2) 的范围是 -999.99999.99
  • 用途:主要用于需要高精度的小数计算,如财务数据、货币计算等。
  • 优点: 在存储时保持数据的精确性,避免了浮点数的精度误差

日期与时间类型

日期与时间类型用于存储不同格式的日期和时间数据

  • YEAR

格式: YYYY 例如,2024
用于存储年份信息,可以是2位或4位格式

  • DATE

格式: YYYY-MM-DD 例如, 2024-12-16
用于存储日期信息,不包含时间部分

  • TIME

格式: HH:MM:SS[.fraction]
例如:11:30:00 或 11:30:00.123456
用于存储时间信息,不包含日期部分。可以精确到微秒(.fraction)

  • DATETIME

格式: YYYY-MM-DD HH:MM:SS[.fraction]
例如,2024-12-16 11:30:00 或 2024-12-16 11:30:00.123456
用于存储日期和时间信息,同时可以在创建时设置默认值或自动更新为当前时间。

  • TIMESTAMP

格式: YYYY-MM-DD HH:MM:SS[.fraction]
用途与DATETIME类似,但是TIMESTAMP会自动转换为UTC时间(世界标准时间),并在检索时自动切换为当前会话的时区。

字符串类型

用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其它数据,比如图片和声音的二进制数据

char 和 varchar类型

  • CHAR(n)

特点:在存储时,如果字符数少于 n,会用空格填充;检索时,尾部的空格会被自动去除。
用途:主要适用于长度固定的字符串,例如身份证号等

  • VARCHAR(n)

特点: 仅存储实际需要的字符数,节省空间;不进行填充,检索时保持原样。
用途:适用于长度可变的字符串,如用户昵称等

text类型

主要用于存储大量文本数据,如文章内容、长篇小说等。都不进行填充,检索时保持原样。

  • TINYTEXT

用途:存储较小的文本数据
最大长度: 255 个字符

  • TEXT

用途:存储中等长度的文本数据
最大长度: 65,535 个字符。

  • MEDIUMTEXT

用途:存储较长的文本数据
最大长度: 16,777,215 个字符

  • LONGTEXT

用途:存储非常长的文本数据。
最大长度: 4,294,967,295 个字符

ENUM 和 SET类型

  • ENUM

枚举类型,允许从预定义的值列表中选择一个值。
用途: 适用于存储固定选项的数据,如性别。

  • SET

集合类型,允许从预定义的值列表中选择多个值。
用途: 适用于存储多选项的数据,如用户爱好等

二进制类型

前面学习的都是存储文本的字符串类型,下面讲 MySQL中存储二进制数据的数据类型

BINARY 和 VARBINARY

用途: 适用于存储二进制数据,如图像或音频文件

  • BINARY(n)

固定长度的二进制字符串。
特点:存储时用 0x00 字节填充不足的部分,检索时保持原样不变

  • VARBINARY(n)

可变长度的二进制字符串。
特点: 仅存储实际需要的字节数,不进行填充。

BLOB类型

用途:适用于存储二进制大对象,如高清图片、4k视频等

  • TINYBLOB

可以存储较小的二进制数据。
最大长度: 255 个字节

  • BLOB

可以存储中等大小的二进制数据。
最大长度: 65,535 个字节。

  • MEDIUMBLOB

可存储较大的二进制数据
最大长度: 16,777,215 个字节

  • LONGBLOB

可存储庞大的二进制数据
最大长度: 4,294,967,295 个字节

如何选择数据类型

在我们设计Mysql的数据库时,选择合适的数据类型是至关重要的。合适的数据类型能够帮助我们节省大量的存储空间,方便后续的查询修改操作,保持数据的完整性。

由数据类型性质选择

  • 整数类型:

如果数据范围较小(如状态码),使用 TINYINTSMALLINT
对于大多数整数数据,常常使用 INT
若数据范围非常大,使用 BIGINT
需要增加正数的范围,可以使用 UNSIGNED

  • 浮点数类型:

若对精度要求不高,使用 FLOATDOUBLE
对于需要高精度的场景(如财务数据),使用 DECIMAL

  • 日期和时间类型:

仅存储年份,使用YEAR
仅存储日期,使用 DATE
仅存储时间,使用 TIME
同时存储日期和时间,使用 DATETIME(如果不需要时区转换)或 TIMESTAMP(如果需要时区转换和自动初始化/更新)

  • 字符串类型:

固定长度字符串,使用 CHAR
可变长度字符串,使用 VARCHAR
大量文本数据,使用 TEXT 系列。
二进制数据,使用 BLOB 系列。
固定选项,使用 ENUM
多选项,使用 SET

由存储空间和性能选择

  • 选择占用空间最小的类型

例如,如果一个字段的最大值不会超过 100,使用 TINYINT 而不是 INT,因为 TINYINT 占用更少的存储空间。

  • 使用固定长度的类型

对于长度固定且变化不大的字段,使用 CHAR 可以提高查询性能,因为它在存储时占用固定的存储空间

由查询性能选择

合适的数据类型可以提高查询性能。例如,使用 INT 类型进行索引查询通常比使用 VARCHAR 类型更高效

运算符

MySQL中,运算符用于执行各种操作,如算术运算、比较、逻辑判断等

主要包含四大类:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位操作运算符

算术运算符

算术运算符是SQL中最基本的运算符。

+ 、 - 、 * 、 /、 %

在这里插入图片描述

比较运算符

一个比较运算符的结果总是1,0或者是NULL。

   =<=><> (!=)<=>=>、IS NULL,    
    IS NOT NULL、LEAST、GREATEST、  
    BETWEEN . . . AND. . . 、ISNULL、IN、NOT  
    IN、LIKE、REGEXP

在这里插入图片描述在这里插入图片描述

逻辑运算符

逻辑运算符的求值所得结果均为TRUE、FALSENULL

 NOT 或者 !
 AND 或者 &&
 OR 或者 ||  
 XOR

在这里插入图片描述

位运算符

位运算符是用来对二进制字节中的位进行测试、移位或者测试处理

位或(|)
位与(&)
位异或(^  )
位左移(<<)
位右移(<<)
位取反(~)

在这里插入图片描述

运算符的优先级

MySQL按表达式的顺序从左到右依次计算。当然,在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级。

运算符的优先级从高到低依次为:

逻辑非(!)、按位取反(~)、乘除(*, /)、加减(+, -)、比较运算符(>, <, = 等)、逻辑与(AND)、逻辑或(OR)等

综合案例(小练习)

实验目的

创建数据表,并对表中的数据进行运算操作,掌握各种运算符的使用方法。

实验步骤

创建表tmp15,其中包含VARCHAR类型的字段noteINT类型的字段price,使用运算符对表tmp15中不同的字段进行运算;使用逻辑操作符对数据进行逻辑操作;使用位操作符对数据进行位操作。

  • 首先创建数据表tmp15
    SQL语句如下:
CREATE TABLE tmp15 (note VARCHAR(100), price INT);
  • 向表中插入一条记录,note值为“Thisisgood”,price值为50
    SQL语句如下:
INSERT INTO tmp15 VALUES(“Thisisgood”, 50);
  • 对表tmp15中的整型数值字段price进行算术运算,执行过程如下:
SELECT price, price + 10, price -10, price * 2, price /2, price%3 FROM tmp15;
+--------+------------+-----------+-----------+-----------+---------+
| price  | price + 10 | price -10 | price * 2 | price /2 | price%3 |
+--------+------------+-----------+-----------+-----------+---------+
|     50 |         60 |        40 |       100 |   25.0000 |     2 |
+--------+------------+-----------+-----------+-----------+---------+
  • 对表tmp15中的整型数值字段price进行比较运算,执行过程如下:
 SELECT price, price> 10, price<10, price != 10, price =10, price <=>10,price <>10 FROM tmp15 ;
+--------+-----------+-----------+--------------+------------+---------------+--------------+
| price  | price> 10 | price<10 | price != 10 | price =10 | price <=>10 | price <>10 |
+--------+-----------+-----------+--------------+------------+---------------+--------------+
|     50 |         1 |         0 |          1 |         0 |           0 |        1 |
+------ -+-----------+-----------+--------------+------------+----------------+--------------+
  • 判断price值是否落在30~80区间;返回与70,30相比最大的值,判断price是否为IN列表(10, 20, 50, 35)中的某个值,执行过程如下:
mysql> SELECT price, price BETWEEN 30 AND 80, GREATEST(price, 70,30), price IN (10, 20, 50,35) FROM tmp15;
+--------+------------------------------------+--------------------------------+----------------------------+
| price  | price BETWEEN 30 AND 80 | GREATEST(price, 70,30) | price IN (10, 20, 50,35) |
+--------+------------------------------------+--------------------------------+----------------------------+
|    50 |                       1 |                     70 |                  1 |
+--------+------------------------------------+--------------------------------+----------------------------+
  • 对tmp15中的字符串数值字段note进行比较运算。
    判断表tmp15note字段是否为空;使用LIKE判断是否以字母’t’开头;使用REGEXP判断是否以字母’y’结尾;判断是否包含字母’g’或者’m’,代码如下:
mysql> SELECT note, note IS NULL, note LIKE 't%', note REGEXP '$y' ,note REGEXP '[gm]' FROM tmp15 ;
+--------------+----------------+-------------------+-----------------------+--------------------------+
| note      | note IS NULL | note LIKE 't%' | note REGEXP '$y' | note REGEXP '[gm]' |
+--------------+----------------+------------------+------------------------+--------------------------+
| Thisisgood |           0 |           1 |               0 |                1 |
+--------------+-----------------+------------------+----------------------+---------------------------+
  • price字段值与NULL,0进行逻辑运算,结果如下:
mysql> SELECT price, price && 1, price && NULL, price||0, price AND 0, 0 AND NULL, price OR NULL FROM tmp15 ;
+--------+--------------+--------------------+----------+---------------+------------------+--------------------+
| price  | price && 1 | price && NULL | price||0 | price AND 0 | 0 AND NULL | price OR NULL |
+--------+--------------+--------------------+----------+---------------+------------------+--------------------+
|    50 |         1 |        NULL |      1 |         0 |           0 |             1 |
+--------+--------------+-------------------+-----------+---------------+------------------+--------------------+
1 row in set (0.00 sec)
mysql>  SELECT price,!price,NOT NULL,price XOR 3, 0 XOR NULL, price XOR 0 FROM tmp15 ;
+--------+--------+--------------+----------------+-----------------+-----------------+
| price  | !price | NOT NULL | price XOR 3 | 0 XOR NULL | price XOR 0 |
+--------+--------+--------------+----------------+-----------------+-----------------+
|    50 |       0 |     NULL |          0 |      NULL |           1 |
+--------+--------+--------------+----------------+-----------------+-----------------+
1 row in set (0.00 sec)
  • price字段值与2、4进行按位与、按位或操作,并对price进行按位操作,结果如下:
mysql> SELECT price, price&2 , price|4, ~price FROM tmp15;
+--------+----------+---------+-----------------------------+
| price  | price&2 | price|4 | ~price               |
+--------+----------+---------+-----------------------------+
|    50 |      2 |    54 | 18446744073709551565 |
+--------+----------+---------+------------------------------+
  • price字段值分别左移和右移两位,执行过程如下:
mysql> SELECT price, price<<2, price>>2  FROM tmp15;
+--------+------------+-----------+
| price  | price <<2 | price>>2 |
+--------+------------+-----------+
|     50 |       200 |      12 |
+--------+------------+-----------+

学习知识的时间总是过得很快,Mysql数据类型与运算符的内容到此结束,明天再见啦!!!
😆想要了解更多内容请点击“练小杰的CSDN”
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot中基于JWt的授权与续期方案

一、 SpringBoot中Token登录授权、续期和终止的方案RedisToken SpringBoot项目写登录注册之类的方案 使用Cookie或Session的话&#xff0c;它是有状态的&#xff0c;不符合分布式技术架构使用Security或者Shiro框架实现起来比较复杂&#xff0c;一般项目无需用那么复杂使用JW…

小程序快速实现大模型聊天机器人

需求分析&#xff1a; 基于大模型&#xff0c;打造一个聊天机器人&#xff1b;使用开放API快速搭建&#xff0c;例如&#xff1a;讯飞星火&#xff1b;先实现UI展示&#xff0c;在接入API。 最终实现效果如下&#xff1a; 一.聊天机器人UI部分 1. 创建微信小程序&#xff0c…

【OSS】php使用oss存储

阿里云oss官方文档&#xff1a;文档 1、前期工作 创建阿里云账号&#xff0c;登录创建bucket&#xff0c;注意修改权限&#xff0c;要不然可能读取不到 申请accessKeyId和accessKeySecret accessKey 2、项目中安装OSS扩展 composer require aliyuncs/oss-sdk-php3、基础使…

Elasticsearch02-安装7.x

零、文章目录 Elasticsearch02-安装7.x 1、Windows安装Elasticsearch &#xff08;1&#xff09;JDK安装 Elasticsearch是基于java开发的&#xff0c;所以需要安装JDK。我们安装的Elasticsearch版本是7.15&#xff0c;对应JDK至少1.8版本以上。也可以不安装jdk&#xff0c;…

【Qt】drawText字体大小问题探究

背景 软件的一个功能是&#xff1a; 打开图片在图片上绘制序号&#xff0c;序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单&#xff0c;在屏幕上显示时重写paintEvent函数&#xff0c;利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…

redis 缓存使用

工具类 package org.springblade.questionnaire.redis;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factor…

C# OpenCvSharp DNN 实现百度网盘AI大赛-表格检测第2名方案第一部分-表格边界框检测

目录 说明 效果 模型 项目 代码 frmMain.cs YoloDet.cs 参考 下载 其他 说明 百度网盘AI大赛-表格检测的第2名方案。 该算法包含表格边界框检测、表格分割和表格方向识别三个部分&#xff0c;首先&#xff0c;ppyoloe-plus-x 对边界框进行预测&#xff0c;并对置信…

创建项目以及本地仓库和远程仓库并上传项目

创建项目以及本地仓库和远程仓库并上传项目 其详细流程如下&#xff1a; 1、本地创建项目 2、创建本地仓库&#xff08;若使用idea在创建项目时选择了创建.git本地仓库&#xff0c;则此步骤省略&#xff09; 进入到你需要上传的项目的目录下&#xff0c;右键找到Git Bah He…

鸿蒙操作系统简介

华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;&#xff0c;是华为公司于2019年8月9日在东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的面向全场景的分布式操作系统&#xff0c;可以创造一个超级虚拟终端互联的世界&#xff0c;将人、设备、场…

MySQL存储引擎-概述

存储引擎 存储引擎&#xff08;Storage Engine&#xff09;是数据库管理系统中负责数据存储和检索的部分。之前在MySQL的历史地位中曾经讲过&#xff0c;存储引擎是可插拔的。5.5之前默认采用MyISAM存储引擎&#xff0c;从5.5开始采用InnoDB存储引擎。 9大存储引擎 可以通过…

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析 在裸聊敲诈、虚假理财诈骗案件类型中&#xff0c;犯罪分子为了能实现更低成本、更快部署应用的目的&#xff0c;其服务器架构多为常见的初始化网站架构&#xff0c;也称为站库同体服务器&#xff01;也就是说网站应用…

【数据结构进阶】AVL树深度剖析 + 实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、AVL树的概念 二、AVL树底层解析及实现 1. 节点的定义 2. 接口声明 3. AVL树的插入 3.1 更新平衡因子 3.2 旋转&#xff08;重点…

java_断点调试(debug)

按照如下配置好后&#xff0c;即可点击“F7”,进入相应的方法&#xff0c;查看源码 package com.hspedu.debug_;//debug对象创建的过程&#xff0c;加深对调试的理解 public class Debug01 {public static void main(String[] args) {//创建对象的流程//&#xff08;1&#xff…

YOLOv11融合[CVPR2024]Starnet中的star block特征提取模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewri…

【kubernetes】k8s集群的简述与搭建

简述 Kubernetes&#xff08;简称 K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序 关键特性 自动化部署和回滚&#xff1a;Kubernetes 可以自动化地部署和回滚应用程序&#xff0c;确保应用程序始终处于预期的状态。服务发现…

SpringBoot+vue实现WebSocket通信

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务器主动向客户端推送数据。 WebSocket的主要特点&#xff1a; 全双工通信&#xff1a;客户端和服务器之间的数据可以同时双向传输低延迟&…

【BUG】记一次context canceled的报错

文章目录 案例分析gorm源码解读gin context 生命周期context什么时候cancel的什么时候context会被动cancel掉呢&#xff1f; 野生协程如何处理 案例分析 报错信息 {"L":"ERROR","T":"2024-12-17T11:11:33.0050800","file"…

H5 中 van-popup 的使用以及题目的切换

H5 中 van-popup 的使用以及题目的切换 在移动端开发中&#xff0c;弹窗组件是一个常见的需求。vant 是一个轻量、可靠的移动端 Vue 组件库&#xff0c;其中的 van-popup 组件可以方便地实现弹窗效果。本文将介绍如何使用 van-popup 实现题目详情的弹窗展示&#xff0c;并实现…

【第一节】Git的简介和安装

目录 一、git的介绍 二、git 的安装 2.1 Linux 平台安装 2.2 源码安装 2.3 Windows 平台安装 2.4 Mac 平台安装 2.5 Git 配置 2.5.1 配置文件 2.5.2 用户信息配置 2.5.3 文本编辑器配置 2.5.4 差异分析工具配置 2.5.5 查看配置信息 一、git的介绍 Git 是一种开源的…

奇怪的知识又增加了,ESP32下的Lisp编程:ULisp--Lisp for microcontrollers

ESP32下有MicroPython&#xff0c;那么我就在想&#xff0c;有Lisp语言支持吗&#xff1f;答案是果然有&#xff01;有ULisp&#xff0c;专门为MCU设计的Lisp&#xff01; 网址&#xff1a;uLisp - Lisp for microcontrollers 介绍&#xff1a;用于微控制器的 Lisp 适用于 Ar…