我在广州学 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.mzph.cn/bicheng/64409.shtml

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

相关文章

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

使用FastGPT制做一个AI网站日志分析器

越来越的多网站面临每天上千次的扫描和各类攻击&#xff0c;及时发现攻击IP&#xff0c;并有效的屏蔽不良访问成为网站安全的重要保障&#xff0c;这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器&#xff0c;下面就开始&#xff1a; …

RabbitMQ中的Work Queues模式

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件&#xff0c;支持多种消息传递模式。其中&#xff0c;Work Queues&#xff08;工作队列&#xff09;模式是一…

【Python爬虫系列】_032.Scrapy_全站爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

音频声音太小怎么调大?调大音频声音的几种方法

音频声音太小怎么调大&#xff1f;音频声音过小可能由多种原因引起。从设备本身的硬件设置&#xff0c;到应用程序或播放软件的音量控制&#xff0c;再到文件本身的音频质量&#xff0c;都可能是导致声音过小的因素。尤其是在观看视频或听音乐时&#xff0c;若音量过低&#xf…

条件随机场(CRF)详解:原理、算法与实现(深入浅出)

目录 1. 引言2. 什么是条件随机场&#xff1f;2.1 直观理解2.2 形式化定义 3. CRF的核心要素3.1 特征函数3.2 参数学习 4. 实战案例&#xff1a;命名实体识别5. CRF vs HMM6. CRF的优化与改进6.1 特征选择6.2 正则化 7. 总结与展望参考资料 1. 引言 条件随机场(Conditional Ra…

基于Clinical BERT的医疗知识图谱自动化构建方法,双层对比框架

基于Clinical BERT的医疗知识图谱自动化构建方法&#xff0c;双层对比框架 论文大纲理解1. 确认目标2. 目标-手段分析3. 实现步骤4. 金手指分析 全流程核心模式核心模式提取压缩后的系统描述核心创新点 数据分析第一步&#xff1a;数据收集第二步&#xff1a;规律挖掘第三步&am…

LWIP协议:三次握手和四次挥手、TCP/IP模型

一、三次握手&#xff1a;是客户端与服务器建立连接的方式&#xff1b; 1、客户端发送建立TCP连接的请求。seq序列号是由发送端随机生成的&#xff0c;SYN字段置为1表示需要建立TCP连接。&#xff08;SYN1&#xff0c;seqx&#xff0c;x为随机生成数值&#xff09;&#xff1b;…

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种Boosting算法&#xff0c;它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重&#xff0c;使那些被错误分类的样本在后续的训练中得到…

PHP代码审计学习(一)--命令注入

1、漏洞原理 参数用户可控&#xff0c;程序将用户可控的恶意参数通过php可执行命令的函数中运行导致。 2、示例代码 <?php echorec-test; $command ping -c 1 .$_GET[ip]; system($command); //system函数特性 执行结果会自动打印 ?> 通过示例代码可知通过system函…

【并发容器】源码级ConcurrentHashMap详解(java78)

1. ConcurrentHashMap 为什么要使用ConcurrentHashmap 在多线程的情况下&#xff0c;使用HashMap是线程不安全的。另外可以使用Hashtable&#xff0c;其是线程安全的&#xff0c;但是Hashtable的运行效率很低&#xff0c;之所以效率低下主要是因为其实现使用了synchronized关…

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的&#xff08;面试&#xff09; 上文介绍reids的安装以及基本概念&#xff0c;本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对&#xff08;KEY - VALUE&#xff09;存储的…

基于SpringBoot的乡村信息服务平台的设计与实现

摘 要 乡村信息服务平台的研究背景源于当前乡村振兴战略的实施和信息化技术的快速发展。随着城乡经济差距的逐渐凸显&#xff0c;乡村信息服务平台成为一种新型的信息化手段。本系统采用Java语言&#xff0c;MySQL数据库&#xff0c;采用MVC框架, JS技术开发。乡村信息服务平…

大数据技术与应用——数据可视化(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据可视化 大…

【C++移动语义与完美转发】左值右值,引用,引用折叠,移动语义,万能引用与完美转发

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。本期是一个鸽了半年的教程&#xff0c;很早以前我就一直想写一篇文章有关C的移动语义&#xff0c;一直拖到现在()&#xff0c;那么今…

暂停一下,给Next.js项目配置一下ESLint(Next+tailwind项目)

前提 之前开自己的GitHub项目&#xff0c;想着不是团队项目&#xff0c;偷懒没有配置eslint&#xff0c;后面发现还是不行。eslint的存在可以帮助我们规范代码格式&#xff0c;同时 ctrl s保存立即调整代码格式是真的很爽。 除此之外&#xff0c;团队使用eslint也是好处颇多…

Hadoop学习笔记(包括hadoop3.4.0集群安装)(黑马)

Hadoop学习笔记 0-前置章节-环境准备 0.1 环境介绍 配置环境&#xff1a;hadoop-3.4.0&#xff0c;jdk-8u171-linux-x64 0.2 VMware准备Linux虚拟机 0.2.1主机名、IP、SSH免密登录 1.配置固定IP地址&#xff08;root权限&#xff09; 开启master&#xff0c;修改主机名为…

扩展SpringBoot中的SpringMVC的默认配置

SpringBoot默认已经给我们做了很多SpringMVC的配置&#xff0c;哪些配置&#xff1f; 视图解析器ViewResolver静态资料的目录默认首页index.html图标名字和图标所在目录&#xff0c;favicon.ico类型转换器Converter&#xff0c;格式转换器的Formatter消息转换器HttpMessageCon…

企业内训|阅读行业产品运营实战训练营-某运营商数字娱乐公司

近日&#xff0c;TsingtaoAI公司为某运营商旗下数字娱乐公司组织的“阅读行业产品运营实战训练营”在杭州落下帷幕。此次训练营由TsingtaoAI资深互联网产品专家程靖主持。该公司的业务骨干——来自内容、市场、业务、产品与技术等跨部门核心岗位、拥有8-10年实战经验的中坚力量…