❤️持续创作,加速成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情”
🎨 个人介绍
👉大家好,我是:旺仔不是程序员
👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻
👉你的支持,是我每天更新的动力。
👉赞点:👍 留言:✍ 收藏:⭐
👉个人格言:想法一步一步的落实,才是你我前进最佳选择。
1. 数据类型
1. 数据类型简介
- 概述:MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型
- 主要数据类型
- 数值类型:
- 包括整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
- 浮点小数数据类型:FLOAT和DOUBLE
- 定点小数类型:DECIMAL
- 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP
- 字符串类型:
- 包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等
- 字符串类型又分为:文本字符串和二进制字符串
2. 数据类型表格
数值类型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 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) | 单精度浮点数值 |
| DOUBLE | 8 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的值 | 小数值 |
字符串类型
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255 bytes | 定长字符串 |
| TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255 bytes | 短文本字符串 |
| BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
| TEXT | 0-65 535 bytes | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
日期类型
| 类型 | 大小( bytes) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 | ||
| 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
2. 如何选择数据类型
- 整数和浮点数
- 如果不需要小数部分,就使用整数来保存数据
- 如果需要表示小数部分,就使用浮点数类型
- DOUBLE类型精度比FLOAT类型高,因此要求存储精度较高时应选择DOUBLE类型
- 浮点数和定点数
- 浮点数比定点数能表示更大的数据范围
- 浮点数容易产生误差,因此对精确度要求比较高时,建议使用DECIMAL来存储
- DECIMAL在MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据
- 日期与时间类型
- 如果同时需要记录日期和时间,则可以使用TIMESTAMP或者DATETIME类型
- 当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间
- 因此当需要插入记录的同时插入当前时间时,使用TIMESTAMP是方便的
- 另外,TIMESTAMP在空间上比DATETIME更有效
- CHAR与VARCHAR之间的特点与选择
- 区别
- CHAR是固定长度字符,VARCHAR是可变长度字符
- HAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格
- 存储引擎对于选择CHAR和VARCHAR的影响
- 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列
- 对于InnoDB存储引擎:使用可变长度的数据列
- ENUM和SET
- ENUM只能取单值,在需要从多个值中选取一个时,可以使用ENUM
- ENUM的合法取值列表最多允许有65535个成员
- SET可取多值,在需要取多个值的时候,适合使用SET类型,比如要存储一个人的兴趣爱好,最好使用SET类型
- SET的合法取值列表最多允许有64个成员
- 注意:ENUM和SET的值是以字符串形式出现的,但在内部,MySQL是以数值的形式存储它们的
- BLOB和TEXT
- LOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息
- BLOB主要存储图片、音频信息等,而TEXT只能存储纯文本文件
3. 常见运算符介绍
1. 运算符的简介
- 概述:运算符连接表达式中的各个操作数,其作用是用来指明对操作数所进行的运算
- 常见的运算符类型有算术运算符、比较运算符、逻辑运算符和位运算符
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 ;