第5讲——MySQL数据类型和运算符

101 阅读7分钟

❤️持续创作,加速成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情

🎨 个人介绍

👉大家好,我是:旺仔不是程序员

👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻

👉你的支持,是我每天更新的动力。

👉赞点:👍 留言:✍ 收藏:⭐

👉个人格言:想法一步一步的落实,才是你我前进最佳选择。

my.jpeg

1. 数据类型

1. 数据类型简介

  1. 概述:MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型
  2. 主要数据类型
    1. 数值类型:
      1. 包括整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
      2. 浮点小数数据类型:FLOAT和DOUBLE
      3. 定点小数类型:DECIMAL
    2. 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP
    3. 字符串类型:
      1. 包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等
      2. 字符串类型又分为:文本字符串和二进制字符串

2. 数据类型表格

数值类型

类型大小范围(有符号)范围(无符号)用途
TINYINT1 byte(-128,127)(0,255)小整数值
SMALLINT2 bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 bytes(-3.402 823 466 E+38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度浮点数值
DOUBLE8 bytes(-1.797 693 134 862 315 7 E+308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值
DECIMAL

| 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |

字符串类型

类型大小用途
CHAR0-255 bytes定长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

日期类型

类型大小( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

2. 如何选择数据类型

  1. 整数和浮点数
    1. 如果不需要小数部分,就使用整数来保存数据
    2. 如果需要表示小数部分,就使用浮点数类型
    3. DOUBLE类型精度比FLOAT类型高,因此要求存储精度较高时应选择DOUBLE类型
  2. 浮点数和定点数
    1. 浮点数比定点数能表示更大的数据范围
    2. 浮点数容易产生误差,因此对精确度要求比较高时,建议使用DECIMAL来存储
    3. DECIMAL在MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据
  3. 日期与时间类型
    1. 如果同时需要记录日期和时间,则可以使用TIMESTAMP或者DATETIME类型
    2. 当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间
    3. 因此当需要插入记录的同时插入当前时间时,使用TIMESTAMP是方便的
    4. 另外,TIMESTAMP在空间上比DATETIME更有效
  4. CHAR与VARCHAR之间的特点与选择
    1. 区别
      1. CHAR是固定长度字符,VARCHAR是可变长度字符
      2. HAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格
    2. 存储引擎对于选择CHAR和VARCHAR的影响
      1. 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列
      2. 对于InnoDB存储引擎:使用可变长度的数据列
  5. ENUM和SET
    1. ENUM只能取单值,在需要从多个值中选取一个时,可以使用ENUM
    2. ENUM的合法取值列表最多允许有65535个成员
    3. SET可取多值,在需要取多个值的时候,适合使用SET类型,比如要存储一个人的兴趣爱好,最好使用SET类型
    4. SET的合法取值列表最多允许有64个成员
    5. 注意:ENUM和SET的值是以字符串形式出现的,但在内部,MySQL是以数值的形式存储它们的
  6. BLOB和TEXT
    1. LOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息
    2. BLOB主要存储图片、音频信息等,而TEXT只能存储纯文本文件

3. 常见运算符介绍

1. 运算符的简介

  1. 概述:运算符连接表达式中的各个操作数,其作用是用来指明对操作数所进行的运算
  2. 常见的运算符类型有算术运算符、比较运算符、逻辑运算符和位运算符

2. 运算符表格

算数运算符

算术运算符说明
+加法运算
-减法运算
*乘法运算
/ 或 DIV除法运算
% 或 MOD取余运算

比较运算符

比较运算符说明
=等于
<  和 <=小于和小于等于
> 和 >=大于和大于等于
<=>安全的等于,两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
<> 或!=不等于
IS NULL 或 ISNULL判断一个值是否为 NULL
IS NOT NULL判断一个值是否不为 NULL
LEAST当有两个或多个参数时,返回最小值
GREATEST当有两个或多个参数时,返回最大值
BETWEEN AND判断一个值是否落在两个值之间
IN判断一个值是IN列表中的任意一个值
NOT IN判断一个值不是IN列表中的任意一个值
LIKE通配符匹配
REGEXP正则表达式匹配

位运算符

位运算符说明
|按位或
&按位与
按位异或
<< 按位左移
>> 按位右移
~按位取反,反转所有比特

逻辑运算符

逻辑运算符说明
NOT 或者 !逻辑非
AND 或者 &&逻辑与
OR 或者 ||逻辑或
XOR逻辑异或

4. 案例实战

1. 案例实战——运算符

# 使用数据表tmp15,首先创建该表,SQL语句如下:
CREATE TABLE tmp15 (note VARCHAR(100), price INT);
# 插入数据
INSERT INTO tmp15 VALUES(“Thisisgood”, 50);

# 进行算术运算 和 比较运算符
SELECT price, price + 10, price -10, price * 2, price /2, price%3 FROM tmp15 ;
SELECT price, price> 10, price<10, price != 10, price =10, price <=>10,price <>10 FROM tmp15 ;

# 比较运算符 和 逻辑运算符
SELECT price, price BETWEEN 30 AND 80, GREATEST(price, 70,30), price IN (10, 20, 50,35) FROM tmp15 ;
SELECT note, note IS NULL, note LIKE 't%', note REGEXP '$y' ,note REGEXP '[gm]' FROM tmp15 ;
SELECT price, price && 1, price && NULL, price||0, price AND 0, 0 AND NULL, price OR NULL FROM tmp15 ;

# 逻辑运算符 和 位运算符
mysql>  SELECT price,!price,NOT NULL,price XOR 3, 0 XOR NULL, price XOR 0 FROM tmp15 ;
mysql> SELECT price, price&2 , price|4, ~price FROM tmp15 ;
mysql> SELECT price, price<<2, price>>2  FROM tmp15 ;