MySQL从入门到精通(三)数据类型和运算符

本文详细介绍了MySQL中的各种数据类型,包括数值、日期/时间、字符串类型,并深入解析了算术、比较、逻辑和位运算符的使用。通过实例展示了每种数据类型的特点及运算符的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据类型

mysql支持多种数据类型,主要有数值数据类型,时间/日期类型和字符串类型

  1. 数值数据类型:包括整数类型TINYINT、SMALLINT、INT、MEDIUINT、BIGINT,浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECEIMAL。
  2. 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。
  3. 字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。字符串类型又分文本字符串类型和二进制字符串类型。

1.1整数类型

整数型数据类型

数据类型说明存储需求
TINYINT很小的整数1个字节
SNALLINT小的整数2个字节
MEDIUMINT中等大小的整数3个字节
INT(INTEGER)普通大小的整数4个字节
BINGINT大整数8个字节

整数类型的取值范围

数据类型有符号无符号
TINYINT(-128,127)(0,255)
SNALLINT(-32768,32767)(0,65 535)
MEDIUMINT(-8388608,8388607)(0,16777215)
INT(INTEGER)(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
BINGINT(-9223372036854775,808,9223 372036854775807)(0,18446744073 709551615)

1.2浮点数类型和定点数类型

mysql中使用浮点数类型和定点数类型表示小数。

浮点数据类型有两种,单精度浮点型(FLOAT)和双精度浮点型(DOUBLE)。定点类型只有一种,DECIMAL。浮点和定点数据类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数,N称为标度,表示小数的位数。

mysql中的小数类型

类型名称说明存储需求
FLOAT单精度浮点4个字节
DOUBLE双精度浮点8个字节
DECIMAL(M,D),DEC压缩的严格定点数M+2个字节

小数类型取值范围

FLOAT:

  • 有符号: (-3.402823466 E+38,-1.175494351 E-38),0,(1.175 494351E-38,3.402823466351E+38)
  • 无符号:0,(1.175494351 E-38,3.402823466E+38)

DOUBLE:

  • 有符号: (-1.7976931348623157 E+308,-2.2250738585072014 E-308),0,(2.2250738585072014 E-308,1.7976931348623157 E+308)
  • 无符号:0,(2.2250738585072014 E-308,1.7976931348623157E+308)

DECIMAL:依赖于M和D值

1.3日期与时间类型

日期与时间数据类型

类型名称日期格式时间范围存储需求
YEARYYYY1901~21551字节
TIMEHH:MM:SS-838:59:59~838:59:593字节
DATEYYYY-MM-DD1000-01-01~9999-12-313字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:598字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC4字节

1.4文本字符串类型

文本字符串数据类型

数据类型说明存储需求
CHAR(M)固定长度字符串M字节,1<=M<=255
VARCHAR(M)变长字符串M字节,M<65535
TINYTEXT(M)短文本字符串M字节,M<255
MEDIUMTEXT(M)中等长本字符串M字节,M<=16777215
LONGTEXT(M)极大文本字符串M字节,M<4294967295
ENUM(M)短文本字符串取决于枚举值的数目(最大65535)
SET(M)短文本字符串取决于集合成员的数量(最多64个成员)

1.5二进制字符串类型

类型名称说明存储需求
BIT(M)位字段类型8个字节
BINARY(M)固定长度二进制字符串M个字节
VARBINARY(M)可变长度二进制字符串M+1个字节
TINYBLOB(M)非常小的BLOB8个字节
BLOB(M)小BLOBM+1,<2^8个字节
MEDIUNBLOB(M)M+2,<2^16个字节 中等大小的BLOBM+3,<2^24个字节
LONGBLOB(M)非常大的BLOBM+4,<2^32个字节

ENUM类型

ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。

字段名 ENUM('值1','值2',...,'值n')

ENUM的值在内部用整数表示,每个枚举值均有一个索引,成员值从1开始。
例子:

创建表,定义一个ENUM类型的列enm

mysql> create table tmp9(
    -> enm ENUM("first","second","third")
    -> );
Query OK, 0 rows affected (0.10 sec)

enm列的取值范围如下

索引
NULLNULL
‘’0
first1
second2
third3

ENUM类型插入的值,可以是ENUM的值,也可以是索引,如果插入的值不在ENUM列表中,就会报错

mysql> insert into tmp9 values("first"),(1),(2);
mysql> select * from tmp9;
+--------+
| enm    |
+--------+
| first  |
| first  |
| second |
+--------+
3 rows in set (0.00 sec)
//插入ENUM中不存在的值
mysql> insert into tmp9 values("哈哈");
ERROR 1265 (01000): Data truncated for column 'enm' at row 1

查询enm的索引值

mysql> select enm, enm+0 from tmp9;
+--------+-------+
| enm    | enm+0 |
+--------+-------+
| first  |     1 |
| first  |     1 |
| second |     2 |
+--------+-------+
3 rows in set (0.00 sec)

SET类型

SET与ENUM类型相同,也可以有0个或者多个值,区别是ENUM类型的列可以从定义的ENUM中取多个值。

例子:

mysql> create table temp8(
    -> hobby SET("打篮球","看书","羽毛球","玩游戏")
    -> );
Query OK, 0 rows affected (0.08 sec)
mysql> insert into temp8  values("打篮球,羽毛球,看书"),("看书"),("打篮球");
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from temp8;
+--------------------+
| hobby              |
+--------------------+
| 打篮球,看书,羽毛球 |
| 看书               |
| 打篮球             |
+--------------------+
3 rows in set (0.00 sec)

2、常见运算符

运算符是告诉MySQL执行特定算术或逻辑操作的符号。MySQL内部运算符很丰富,主要分为四类:

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

2.1算术运算符

运算符作用
+加法运算
-减法运算
*乘法运算
/除法运算,返回商
%求余运算,返回余数

列子

创建表

mysql> create table tmp01(
    -> num int(11)
    -> );

插入数据

insert into tmp01 values(10),(9)

用运算符查询数据

mysql> select num,num+10,num-10,num*10,num/10,num%10 from tmp01;
+------+--------+--------+--------+--------+--------+
| num  | num+10 | num-10 | num*10 | num/10 | num%10 |
+------+--------+--------+--------+--------+--------+
|   10 |     20 |      0 |    100 | 1.0000 |      0 |
|    9 |     19 |     -1 |     90 | 0.9000 |      9 |
+------+--------+--------+--------+--------+--------+
2 rows in set (0.00 sec)

2.2比较运算符

MySQL中的比较运算符

运算符作用说明
=等于
<=>安全的等于
<>(!=)=不等于
<=小于等于
>=大于等于
>小于
<大于
IS NULL为空
IS NOT NULL不为空
LEAST返回最小值
GREATEST返回最大值
BETWEEN AND在两值间>=min&&<=max
NOT BETWEEN不在在两值间
ISNULL与IS NULL相同
IN在集合中
NOT IN不在集合中
LIKE模糊匹配
REGEXP或 RLIKE正则表达式匹配

等于运算符(=)

mysql> select 1=1,2=3,'1'=1,'1'='1',1=null,null=null;
+-----+-----+-------+---------+--------+-----------+
| 1=1 | 2=3 | '1'=1 | '1'='1' | 1=null | null=null |
+-----+-----+-------+---------+--------+-----------+
|   1 |   0 |     1 |       1 |   NULL |      NULL |
+-----+-----+-------+---------+--------+-----------+

结果可以看到:1=1和’1’=1、‘1’='1’值相同。”=“不能判断null值。

因为,数值比较时有如下规则

  1. 若有一个h或者两个参数为NULL,则比较运算的返回结果为NULL
  2. 若一个比较运算中l两个参数都是字符串,则按字符串进行比较
  3. 若两个参数均为整数,则按整数进行比较
  4. 若一个字符串和数字进行相等判断,则mysql可以自动将数字转化为字符串

安全等于(<=>)

<=>可以用来判断null值

mysql> select null<=>null,null<=>1;
+-------------+----------+
| null<=>null | null<=>1 |
+-------------+----------+
|           1 |        0 |
+-------------+----------+

IS NULL(ISNULL)和IS NOT NULL运算符

mysql> select isnull(10),isnull(null),10 is null,10 is not null;
+------------+--------------+------------+----------------+
| isnull(10) | isnull(null) | 10 is null | 10 is not null |
+------------+--------------+------------+----------------+
|          0 |            1 |          0 |              1 |
+------------+--------------+------------+----------------+

BETWEEN AND运算符

mysql> select 4 between 2 and 5,6 between 2 and 5,4 not between 2 and 5;
+-------------------+-------------------+-----------------------+
| 4 between 2 and 5 | 6 between 2 and 5 | 4 not between 2 and 5 |
+-------------------+-------------------+-----------------------+
|                 1 |                 0 |                     0 |
+-------------------+-------------------+-----------------------+

least和greatest运算

mysql> select least (2,3,4),greatest(1,2,3,4),least('a','b','c'),greatest('a','d','b');
+---------------+-------------------+--------------------+-----------------------+
| least (2,3,4) | greatest(1,2,3,4) | least('a','b','c') | greatest('a','d','b') |
+---------------+-------------------+--------------------+-----------------------+
|             2 |                 4 | a                  | d                     |
+---------------+-------------------+--------------------+-----------------------+
1 row in set (0.00 sec)

in和not in运算符

mysql> select 1 in(1,2,3), 1 not in(1,2,3),null in(1,2,3);
+-------------+-----------------+---------------+
| 1 in(1,2,3) | 1 not in(1,2,3) | in(1,2,3) |
+-------------+-----------------+---------------+
|           1 |               0 |          NULL |
+-------------+-----------------+---------------+
1 row in set (0.00 sec)

like运算符

mysql> select 'stud' like 'stud','stu' like 'stud','stud' like 'stu_','stud' like '%d','stud' like '_tu_';
+--------------------+-------------------+--------------------+------------------+--------------------+
| 'stud' like 'stud' | 'stu' like 'stud' | 'stud' like 'stu_' | 'stud' like '%d' | 'stud' like '_tu_' |
+--------------------+-------------------+--------------------+------------------+--------------------+
|                  1 |                 0 |                  1 |                1 |                  1 |
+--------------------+-------------------+--------------------+------------------+--------------------+
1 row in set (0.00 sec)
  • ‘%’,匹配任何数目的字符,甚至包括零字符
  • ‘_’,只能匹配一个字符

regexp运算符

mysql> select 'ssky' regexp '^s','ssky' regexp 'y$','ssky'regexp 'ss.y','ssky' regexp '[ab]';
+--------------------+--------------------+---------------------+----------------------+
| 'ssky' regexp '^s' | 'ssky' regexp 'y$' | 'ssky'regexp 'ss.y' | 'ssky' regexp '[ab]' |
+--------------------+--------------------+---------------------+----------------------+
|                  1 |                  1 |                   1 |                    0 |
+--------------------+--------------------+---------------------+----------------------+
1 row in set (0.00 sec)
  • ‘^’:匹配以该字符后面的字符开头的字符串
  • ‘$’:匹配以该字符后面的字符结尾的字符串
  • ‘.’:匹配任何一个但字符
    ‘[…]’:匹配在括号内的任何字符。

    “[abc]”:匹配’a’,‘b’或’c’

    “[0-9]”:匹配任何数字

    “[a-z]”:匹配任字母
  • ‘*’:匹配0个或多个在它前面的字符

2.3逻辑运算

运算符作用
not或者!逻辑非
and或者&逻辑与
or或者11逻辑或
xor逻辑异或

2.4位运算符

运算符作用
1位或
&位与
^位异或
<<位左移
>>位右移
~位反转,反转所有比特

2.5运算的优先级

在这里插入图片描述

【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动嵌入式设备,支持C++QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状趋势。1.3论文方法与创新点说明本文采用的研究方法在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论关键技术。2.1Spring Boot框架解释Spring Boot的核心概念主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计实现过程。4.1系统架构设计给出系统的整体架构设计各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计数据操作流程。4.3界面设计与实现介绍系统的界面设计用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现成果。6.2展望与改进讨论未来可能的系统改进方向新的功能拓展。
1. 用户与权限管理模块 角色管理: 学生:查看个人住宿信息、提交报修申请、查看卫生检查结果、请假外出登记 宿管人员:分配宿舍床位、处理报修申请、记录卫生检查结果、登记晚归情况 管理员:维护楼栋与房间信息、管理用户账号、统计住宿数据、发布宿舍通知 用户操作: 登录认证:对接学校统一身份认证(模拟实现,用学号 / 工号作为账号),支持密码重置 信息管理:学生完善个人信息(院系、专业、联系电话),管理员维护所有用户信息 权限控制:不同角色仅可见对应功能(如学生无法修改床位分配信息) 2. 宿舍信息管理模块 楼栋与房间管理: 楼栋信息:名称(如 "1 号宿舍楼")、层数、性别限制(男 / 女 / 混合)、管理员(宿管) 房间信息:房间号(如 "101")、户型(4 人间 / 6 人间)、床位数量、已住人数、可用状态 设施信息:记录房间内设施(如空调、热水器、桌椅)的配置与完好状态 床位管理: 床位编号:为每个床位设置唯一编号(如 "101-1" 表示 101 房间 1 号床) 状态标记:标记床位为 "空闲 / 已分配 / 维修中",支持批量查询空闲床位 历史记录:保存床位的分配变更记录(如从学生 A 调换到学生 B 的时间与原因) 3. 住宿分配与调整模块 住宿分配: 新生分配:管理员导入新生名单后,宿管可按专业集中、性别匹配等规则批量分配床位 手动分配:针对转专业、复学学生,宿管手动指定空闲床位并记录分配时间 分配结果公示:学生登录后可查看自己的宿舍信息(楼栋、房间号、床位号、室友列表) 调整管理: 调宿申请:学生提交调宿原因(如室友矛盾、身体原因),选择意向宿舍(需有空位) 审批流程:宿管审核申请,通过后执行床位调换,更新双方住宿信息 换宿记录:保存调宿历史(申请人、原床位、新床位、审批人、时间) 4. 报修与安全管理模块 报修管理: 报修提交:学生选择宿舍、设施类型(如 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值