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

ℹ️大家好,我是😆练小杰,今天主要学习 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.rhkb.cn/news/490939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案

引言 在数据分析和市场研究领域&#xff0c;Twitter&#xff08;现在的X&#xff09;数据一直是重要的信息来源。但是&#xff0c;自从Twitter更改API定价策略后&#xff0c;获取数据的成本大幅提升。本文将介绍一个经济实惠的替代方案。 为什么需要Twitter数据&#xff1f; …

大模型学习笔记------SAM模型详解与思考

大模型学习笔记------SAM模型详解与思考 1、SAM框架概述2、Segment Anything Task3、Segment Anything Model SAM模型是Meta 提出的分割一切模型&#xff08;Segment Anything Model&#xff0c;SAM&#xff09;突破了分割界限&#xff0c;极大地促进了计算机视觉基础模型的发展…

Unity3D仿星露谷物语开发2之工程初始化

1、依赖包安装 进入【Window -> Package Manager】 安装如下插件&#xff1a; 1&#xff09;Cinemachine 它是一套专门控制Unity Camera的模块&#xff0c;适用于各种游戏场景中物体的移动变化&#xff0c;解决了许多关于摄像机间的复杂控制&#xff0c;混合&#xff0c…

[论文阅读] |智能体长期记忆与反思

写在前面&#xff1a;10月份的时候&#xff0c;联发科天玑9400发布&#xff0c;搭载这款旗舰 5G 智能体 AI 芯片的荣耀MagicOS9.0实现了一句话让手机自动操作美团点咖啡。很快商场实体店里便能看到很多品牌手机已经升级为智能体语音助手。下一步&#xff0c;这些智能体或许便能…

数据结构之线性表1

2.1 线性表的定义和基本操作 1.线性结构的特点是&#xff1a;在数据元素的非空有限集中&#xff0c; &#xff08;1&#xff09;存在惟一的一个被称做“第一个”的数据元素&#xff1b; &#xff08;2&#xff09; 存在惟一的一个被称做“最后一个”的数据元素&#xff1b; &a…

【conda/cuda/cudnn/tensorrt】一份简洁的深度学习环境安装清单

&#x1f680;本文主要总结一下conda、cuda、cudnn、tensorrt的快速安装。至于nvidia显卡驱动的安装&#xff0c;暂且不提。本文适合有一定反复安装经验的读者&#x1f602;&#xff0c;方便其快速整理安装思路。 NVIDIA Drivers &#x1f314;01conda ⭐️ 注意&#xff0c;c…

拿到小米 Offer,却迷茫了。。

大家好&#xff0c;我是程序员鱼皮&#xff0c;12 月了&#xff0c;很多小伙伴也拿到了秋招的 Offer&#xff08;没拿到也不要灰心&#xff09;&#xff0c;但即使拿到 Offer&#xff0c;可能还会有一些其他的顾虑。今天分享我们编程导航一位鱼友的提问&#xff0c;给大家作为学…

专业140+总分400+北京理工大学826信号处理导论考研经验北理工电子信息与通信工程,真题,大纲,参考书。

考研总分400&#xff0c;专业826信号处理导论&#xff08;信号与系统和dsp&#xff09;140&#xff0c;成功上岸北理工&#xff0c;虽然已经一段时间&#xff0c;但是后劲很大&#xff0c;每每回想还是昨日事&#xff0c;群里同学多次要求分享自己的一些经验&#xff0c;感谢大…

【CC2530开发基础篇】继电器模块使用

一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开&#xff0c;深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件&#xff0c;广泛用于自动化系统中&#xff0c;用于控制大功率负载的开关操作。在本实验中&#xff0c;将通过GPIO口…

geoserver(1) 发布sql 图层 支持自定义参数

前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…

docker login 出错 Error response from daemon

在自己的Linux服务器尝试登陆docker出错 输入完用户密码之后错误如下&#xff1a; 解决方案 1.打开daemo文件&#xff1a; vim/etc/docker/daemon.json 2.常用的国内Docker 镜像源地址 网易云 Docker 镜像&#xff1a;http://hub-mirror.c.163.com 百度云 Docker 镜像&#x…

aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务

aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务 学习内容&#xff1a; 使用SQS Amazon Simple Queue Service服务整体代码&#xff08;nodejs的通常工程&#xff09;代码动作 1. 使用SQS Amazon Simple Queue Service服务 利用应用程序来学习SQS 创建S3$ aws s…

OpenLinkSaas 2025年1月开发计划

先来看看OpenLinkSaas的大目标 在OpenLinkSaas的产品目标中&#xff0c;让开发人员更加方便的使用云资源是目标之一。通过各大云厂商的API&#xff0c;来可视化云上基础设施的数据是远远不够的。我们准备在2025年1月份增加方便管理和运营研发场景下服务器的能力。 这部分的功能…

6.1 初探MapReduce

MapReduce是一种分布式计算框架&#xff0c;用于处理大规模数据集。其核心思想是“分而治之”&#xff0c;通过Map阶段将任务分解为多个简单任务并行处理&#xff0c;然后在Reduce阶段汇总结果。MapReduce编程模型包括Map和Reduce两个阶段&#xff0c;数据来源和结果存储通常在…

上传文件时获取音视频文件时长和文本文件字数

获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求&#xff0c;要求上传文件时获取音视频文件时长和文本文件字数&#x1f436;。 发现这样的冷门资料不多&#xff0c;特做个记录。本文忽略文件上传功能&#xff0c;只封装核心的工具…

百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!

百度智能云千帆 AppBuilder 发版升级&#xff01; 进一步降低开发门槛&#xff0c;落地大模型到应用的最后一公里。在千帆 AppBuilder 最新升级的 V1.1版本中&#xff0c;企业级 RAG 和 Agent 能力再度提升&#xff0c;同时组件生态与应用集成分发更加优化。 • 企业级 RAG&am…

SAP PP 错误转换字段 组件

错误转换字段 组件 原因: S/4 没有起用40位长度的物料 &#xff0c;CONVERSION_EXIT_ALPHA_INPUT 转换成40位长度物料而 CONVERSION_EXIT_MATN1_INPUT 转换成18位长度物料 这样使得后续bom创建 找不到对应的40位物料 引起的组件文件 解决方案 18位长度物料 20241216 写…

技术速递|.NET 9 简介

作者&#xff1a;.NET 团队 排版&#xff1a;Alan Wang 今天&#xff0c;我们非常激动地宣布 .NET 9的发布&#xff0c;这是迄今为止最高效、最现代、最安全、最智能、性能最高的 .NET 版本。这是来自世界各地数千名开发人员又一年努力的成果。这个新版本包括数千项性能、安全和…

session 共享服务器

1.安装 kryo-3.0.3.jar asm-5.2.jar objenesis-2.6.jar reflectasm-1.11.9.jar minlog-1.3.1.jar kryo-serializers-0.45.jar msm-kryo-serializer-2.3.2.jar memcached-session-manager-tc9-2.3.2.jar spymemcached-2.12.3.jar memcached-session-manager-2.3.2.jar …

Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用

前言 在 Linux 系统管理中&#xff0c;精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时&#xff0c;不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…