第一部分:基础知识 3. 数据类型 --[MySQL轻松入门教程]

第一部分:基础知识 3. 数据类型 --[MySQL轻松入门教程]

MySQL 支持多种数据类型,这些数据类型可以分为几大类:数值类型、字符串类型、日期和时间类型、二进制类型以及枚举和集合。每种类型都有其特定的用途和存储需求。以下是 MySQL 中常用的数据类型的详细介绍:

1. 数值类型

在MySQL中,数值类型用于存储整数和浮点数。以下是一些常见的数值类型及其示例,包括如何创建表、插入数据以及查询数据。

1. 整数类型

TINYINT
  • 范围:-128 到 127(有符号),0 到 255(无符号)
  • 大小:1 字节
CREATE TABLE TinyIntExample (id INT AUTO_INCREMENT PRIMARY KEY,tinyint_col TINYINT
);INSERT INTO TinyIntExample (tinyint_col) VALUES (100);
INSERT INTO TinyIntExample (tinyint_col) VALUES (-100);
INSERT INTO TinyIntExample (tinyint_col) VALUES (255); -- 无符号时有效
-- 查询所有 TinyIntExample 表中的数据
SELECT * FROM TinyIntExample;mysql> create database taoyuan;
Query OK, 1 row affected (0.01 sec)mysql> use taoyuan;
Database changed
mysql> CREATE TABLE TinyIntExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     tinyint_col TINYINT-> );
Query OK, 0 rows affected (0.05 sec)mysql> INSERT INTO TinyIntExample (tinyint_col) VALUES (100);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO TinyIntExample (tinyint_col) VALUES (-100);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO TinyIntExample (tinyint_col) VALUES (255);
ERROR 1264 (22003): Out of range value for column 'tinyint_col' at row 1
mysql> select * from TinyIntExample;
+----+-------------+
| id | tinyint_col |
+----+-------------+
|  1 |         100 |
|  2 |        -100 |
+----+-------------+
2 rows in set (0.00 sec)mysql>

在这里插入图片描述

SMALLINT
  • 范围:-32768 到 32767(有符号),0 到 65535(无符号)
  • 大小:2 字节
CREATE TABLE SmallIntExample (id INT AUTO_INCREMENT PRIMARY KEY,smallint_col SMALLINT
);INSERT INTO SmallIntExample (smallint_col) VALUES (10000);
INSERT INTO SmallIntExample (smallint_col) VALUES (-10000);
INSERT INTO SmallIntExample (smallint_col) VALUES (65535); -- 无符号时有效
-- 查询所有 SmallIntExample 表中的数据
SELECT * FROM SmallIntExample;mysql> CREATE TABLE SmallIntExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     smallint_col SMALLINT-> );
Query OK, 0 rows affected (0.06 sec)mysql> INSERT INTO SmallIntExample (smallint_col) VALUES (10000);
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO SmallIntExample (smallint_col) VALUES (-10000);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO SmallIntExample (smallint_col) VALUES (65535);
ERROR 1264 (22003): Out of range value for column 'smallint_col' at row 1
mysql> select * from SmallIntExample;
+----+--------------+
| id | smallint_col |
+----+--------------+
|  1 |        10000 |
|  2 |       -10000 |
+----+--------------+
2 rows in set (0.00 sec)mysql>

在这里插入图片描述

MEDIUMINT
  • 范围:-8388608 到 8388607(有符号),0 到 16777215(无符号)
  • 大小:3 字节
CREATE TABLE MediumIntExample (id INT AUTO_INCREMENT PRIMARY KEY,mediumint_col MEDIUMINT
);INSERT INTO MediumIntExample (mediumint_col) VALUES (1000000);
INSERT INTO MediumIntExample (mediumint_col) VALUES (-1000000);
INSERT INTO MediumIntExample (mediumint_col) VALUES (8388608); -- 无符号时有效
INSERT INTO MediumIntExample (mediumint_col) VALUES (8388607);
-- 查询所有 MediumIntExample 表中的数据
SELECT * FROM MediumIntExample;mysql> CREATE TABLE MediumIntExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     mediumint_col MEDIUMINT-> );
Query OK, 0 rows affected (0.06 sec)mysql> INSERT INTO MediumIntExample (mediumint_col) VALUES (1000000);
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO MediumIntExample (mediumint_col) VALUES (-1000000);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO MediumIntExample (mediumint_col) VALUES (8388608);
ERROR 1264 (22003): Out of range value for column 'mediumint_col' at row 1
mysql> INSERT INTO MediumIntExample (mediumint_col) VALUES (8388607);
Query OK, 1 row affected (0.01 sec)mysql> select * from MediumIntExample;
+----+---------------+
| id | mediumint_col |
+----+---------------+
|  1 |       1000000 |
|  2 |      -1000000 |
|  3 |       8388607 |
+----+---------------+
3 rows in set (0.00 sec)mysql>

在这里插入图片描述

INT 或 INTEGER
  • 范围:-2147483648 到 2147483647(有符号),0 到 4294967295(无符号)
  • 大小:4 字节
CREATE TABLE IntExample (id INT AUTO_INCREMENT PRIMARY KEY,int_col INT
);INSERT INTO IntExample (int_col) VALUES (100000000);
INSERT INTO IntExample (int_col) VALUES (-100000000);
INSERT INTO IntExample (int_col) VALUES (4294967295); -- 无符号时有效
INSERT INTO IntExample (int_col) VALUES (2147483647);
-- 查询所有 IntExample 表中的数据
SELECT * FROM IntExample;mysql> CREATE TABLE IntExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     int_col INT-> );
Query OK, 0 rows affected (0.07 sec)mysql> INSERT INTO IntExample (int_col) VALUES (100000000);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO IntExample (int_col) VALUES (-100000000);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO IntExample (int_col) VALUES (4294967295);
ERROR 1264 (22003): Out of range value for column 'int_col' at row 1
mysql> INSERT INTO IntExample (int_col) VALUES (2147483647);
Query OK, 1 row affected (0.02 sec)mysql> select * from IntExample;
+----+------------+
| id | int_col    |
+----+------------+
|  1 |  100000000 |
|  2 | -100000000 |
|  3 | 2147483647 |
+----+------------+
3 rows in set (0.00 sec)mysql>

在这里插入图片描述

BIGINT
  • 范围:-9223372036854775808 到 9223372036854775807(有符号),0 到 18446744073709551615(无符号)
  • 大小:8 字节
CREATE TABLE BigIntExample (id INT AUTO_INCREMENT PRIMARY KEY,bigint_col BIGINT
);INSERT INTO BigIntExample (bigint_col) VALUES (1000000000000);
INSERT INTO BigIntExample (bigint_col) VALUES (-1000000000000);
INSERT INTO BigIntExample (bigint_col) VALUES (18446744073709551615); -- 无符号时有效
INSERT INTO BigIntExample (bigint_col) VALUES (9223372036854775807);
-- 查询所有 BigIntExample 表中的数据
SELECT * FROM BigIntExample;mysql> CREATE TABLE BigIntExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     bigint_col BIGINT-> );
Query OK, 0 rows affected (0.08 sec)mysql> INSERT INTO BigIntExample (bigint_col) VALUES (1000000000000);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO BigIntExample (bigint_col) VALUES (-1000000000000);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO BigIntExample (bigint_col) VALUES (18446744073709551615);
ERROR 1264 (22003): Out of range value for column 'bigint_col' at row 1
mysql> INSERT INTO BigIntExample (bigint_col) VALUES (9223372036854775807);
Query OK, 1 row affected (0.01 sec)mysql> select * from BigIntExample;
+----+---------------------+
| id | bigint_col          |
+----+---------------------+
|  1 |       1000000000000 |
|  2 |      -1000000000000 |
|  3 | 9223372036854775807 |
+----+---------------------+
3 rows in set (0.00 sec)mysql>

在这里插入图片描述

2. 浮点数类型

FLOAT
  • 范围:单精度浮点数,4 字节
  • 精度:大约 7 位小数
CREATE TABLE FloatExample (id INT AUTO_INCREMENT PRIMARY KEY,float_col FLOAT
);INSERT INTO FloatExample (float_col) VALUES (123.456);
INSERT INTO FloatExample (float_col) VALUES (-123.456);
INSERT INTO FloatExample (float_col) VALUES (1.234567e+38); -- 最大值
-- 查询所有 FloatExample 表中的数据
SELECT * FROM FloatExample;mysql> CREATE TABLE FloatExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     float_col FLOAT-> );
Query OK, 0 rows affected (0.08 sec)mysql> INSERT INTO FloatExample (float_col) VALUES (123.456);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO FloatExample (float_col) VALUES (-123.456);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO FloatExample (float_col) VALUES (1.234567e+38);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM FloatExample;
+----+------------+
| id | float_col  |
+----+------------+
|  1 |    123.456 |
|  2 |   -123.456 |
|  3 | 1.23457e38 |
+----+------------+
3 rows in set (0.00 sec)mysql> 

在这里插入图片描述

DOUBLE
  • 范围:双精度浮点数,8 字节
  • 精度:大约 15 位小数
CREATE TABLE DoubleExample (id INT AUTO_INCREMENT PRIMARY KEY,double_col DOUBLE
);INSERT INTO DoubleExample (double_col) VALUES (123.4567890123456);
INSERT INTO DoubleExample (double_col) VALUES (-123.4567890123456);
INSERT INTO DoubleExample (double_col) VALUES (1.7976931348623157e+308); -- 最大值
-- 查询所有 DoubleExample 表中的数据
SELECT * FROM DoubleExample;mysql> CREATE TABLE DoubleExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     double_col DOUBLE-> );
Query OK, 0 rows affected (0.07 sec)mysql> INSERT INTO DoubleExample (double_col) VALUES (123.4567890123456);
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO DoubleExample (double_col) VALUES (-123.4567890123456);
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO DoubleExample (double_col) VALUES (1.7976931348623157e+308);
Query OK, 1 row affected (0.02 sec)mysql> SELECT * FROM DoubleExample;
+----+------------------------+
| id | double_col             |
+----+------------------------+
|  1 |      123.4567890123456 |
|  2 |     -123.4567890123456 |
|  3 | 1.7976931348623157e308 |
+----+------------------------+
3 rows in set (0.00 sec)mysql>

在这里插入图片描述

DECIMAL
  • 范围:定点数,用于精确计算,例如货币
  • 格式DECIMAL(M, D),其中 M 是总位数,D 是小数点后的位数
CREATE TABLE DecimalExample (id INT AUTO_INCREMENT PRIMARY KEY,decimal_col DECIMAL(10, 2)
);INSERT INTO DecimalExample (decimal_col) VALUES (12345.67);
INSERT INTO DecimalExample (decimal_col) VALUES (-12345.67);
INSERT INTO DecimalExample (decimal_col) VALUES (9999999.99); -- 最大值
-- 查询所有 DecimalExample 表中的数据
SELECT * FROM DecimalExample;mysql> CREATE TABLE DecimalExample (->     id INT AUTO_INCREMENT PRIMARY KEY,->     decimal_col DECIMAL(10, 2)-> );
Query OK, 0 rows affected (0.05 sec)mysql> INSERT INTO DecimalExample (decimal_col) VALUES (12345.67);
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO DecimalExample (decimal_col) VALUES (-12345.67);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO DecimalExample (decimal_col) VALUES (9999999.99);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM DecimalExample;
+----+-------------+
| id | decimal_col |
+----+-------------+
|  1 |    12345.67 |
|  2 |   -12345.67 |
|  3 |  9999999.99 |
+----+-------------+
3 rows in set (0.00 sec)mysql>

在这里插入图片描述

通过这些示例,你可以看到如何在MySQL中使用不同的数值类型来存储和查询数据。选择合适的数据类型对于确保数据的准确性和性能非常重要。

2. 字符串类型

在MySQL中,字符串类型用于存储文本数据。以下是一些常见的字符串类型及其示例,包括如何创建表、插入数据以及查询数据。

1. 固定长度字符串类型

CHAR
  • 描述:固定长度的字符串,最大长度为255个字符。
  • 存储:如果插入的字符串长度小于定义的长度,MySQL会用空格填充到指定长度。
CREATE TABLE CharExample (id INT AUTO_INCREMENT PRIMARY KEY,char_col CHAR(10)
);INSERT INTO CharExample (char_col) VALUES ('Hello'); -- 实际存储为 'Hello     '
INSERT INTO CharExample (char_col) VALUES ('World'); -- 实际存储为 'World     '
-- 查询所有 CharExample 表中的数据
SELECT * FROM CharExample;

在这里插入图片描述

2. 可变长度字符串类型

VARCHAR
  • 描述:可变长度的字符串,最大长度为65,535个字符。
  • 存储:实际存储时只占用实际长度加一个或两个字节(取决于行的长度)。
CREATE TABLE VarcharExample (id INT AUTO_INCREMENT PRIMARY KEY,varchar_col VARCHAR(50)
);INSERT INTO VarcharExample (varchar_col) VALUES ('Hello');
INSERT INTO VarcharExample (varchar_col) VALUES ('World');
-- 查询所有 VarcharExample 表中的数据
SELECT * FROM VarcharExample;

3. 二进制字符串类型

BINARY
  • 描述:固定长度的二进制字符串,最大长度为255个字节。
  • 存储:如果插入的字符串长度小于定义的长度,MySQL会用零字节填充到指定长度。
CREATE TABLE BinaryExample (id INT AUTO_INCREMENT PRIMARY KEY,binary_col BINARY(10)
);INSERT INTO BinaryExample (binary_col) VALUES (UNHEX('48656C6C6F')); -- 'Hello'
INSERT INTO BinaryExample (binary_col) VALUES (UNHEX('576F726C64')); -- 'World'
-- 查询所有 BinaryExample 表中的数据
SELECT * FROM BinaryExample;

在这里插入图片描述

VARBINARY
  • 描述:可变长度的二进制字符串,最大长度为65,535个字节。
  • 存储:实际存储时只占用实际长度加一个或两个字节(取决于行的长度)。
CREATE TABLE VarbinaryExample (id INT AUTO_INCREMENT PRIMARY KEY,varbinary_col VARBINARY(50)
);INSERT INTO VarbinaryExample (varbinary_col) VALUES (UNHEX('48656C6C6F')); -- 'Hello'
INSERT INTO VarbinaryExample (varbinary_col) VALUES (UNHEX('576F726C64')); -- 'World'
-- 查询所有 VarbinaryExample 表中的数据
SELECT * FROM VarbinaryExample;

在这里插入图片描述

4. 文本类型

TINYTEXT
  • 描述:最多255个字符的文本。
  • 存储:最多255个字符。
CREATE TABLE TinytextExample (id INT AUTO_INCREMENT PRIMARY KEY,tinytext_col TINYTEXT
);INSERT INTO TinytextExample (tinytext_col) VALUES ('Short text');
-- 查询所有 TinytextExample 表中的数据
SELECT * FROM TinytextExample;

在这里插入图片描述

TEXT
  • 描述:最多65,535个字符的文本。
  • 存储:最多65,535个字符。
CREATE TABLE TextExample (id INT AUTO_INCREMENT PRIMARY KEY,text_col TEXT
);INSERT INTO TextExample (text_col) VALUES ('This is a longer text that can be up to 65,535 characters.');
-- 查询所有 TextExample 表中的数据
SELECT * FROM TextExample;
MEDIUMTEXT
  • 描述:最多16,777,215个字符的文本。
  • 存储:最多16,777,215个字符。
CREATE TABLE MediumtextExample (id INT AUTO_INCREMENT PRIMARY KEY,mediumtext_col MEDIUMTEXT
);INSERT INTO MediumtextExample (mediumtext_col) VALUES ('This is an even longer text that can be up to 16,777,215 characters.');
-- 查询所有 MediumtextExample 表中的数据
SELECT * FROM MediumtextExample;
LONGTEXT
  • 描述:最多4,294,967,295个字符的文本。
  • 存储:最多4,294,967,295个字符。
CREATE TABLE LongtextExample (id INT AUTO_INCREMENT PRIMARY KEY,longtext_col LONGTEXT
);INSERT INTO LongtextExample (longtext_col) VALUES ('This is the longest text type in MySQL, capable of storing up to 4,294,967,295 characters.');
-- 查询所有 LongtextExample 表中的数据
SELECT * FROM LongtextExample;

通过这些示例,你可以看到如何在MySQL中使用不同的字符串类型来存储和查询数据。选择合适的数据类型对于确保数据的准确性和性能非常重要。

3. 日期和时间类型

在MySQL中,日期和时间类型用于存储日期和时间信息。以下是一些常见的日期和时间类型及其示例,包括如何创建表、插入数据以及查询数据。

1. 日期类型

DATE
  • 描述:用于存储日期值,格式为 YYYY-MM-DD
  • 范围:从 '1000-01-01''9999-12-31'
CREATE TABLE DateExample (id INT AUTO_INCREMENT PRIMARY KEY,date_col DATE
);INSERT INTO DateExample (date_col) VALUES ('2023-10-01');
INSERT INTO DateExample (date_col) VALUES ('2023-12-31');
-- 查询所有 DateExample 表中的数据
SELECT * FROM DateExample;

在这里插入图片描述

2. 时间类型

TIME
  • 描述:用于存储时间值,格式为 HH:MM:SS
  • 范围:从 '-838:59:59''838:59:59'
CREATE TABLE TimeExample (id INT AUTO_INCREMENT PRIMARY KEY,time_col TIME
);INSERT INTO TimeExample (time_col) VALUES ('12:34:56');
INSERT INTO TimeExample (time_col) VALUES ('23:59:59');

3. 日期和时间类型

DATETIME
  • 描述:用于存储日期和时间值,格式为 YYYY-MM-DD HH:MM:SS
  • 范围:从 '1000-01-01 00:00:00''9999-12-31 23:59:59'
CREATE TABLE DateTimeExample (id INT AUTO_INCREMENT PRIMARY KEY,datetime_col DATETIME
);INSERT INTO DateTimeExample (datetime_col) VALUES ('2023-10-01 12:34:56');
INSERT INTO DateTimeExample (datetime_col) VALUES ('2023-12-31 23:59:59');
TIMESTAMP
  • 描述:用于存储日期和时间值,格式为 YYYY-MM-DD HH:MM:SS
  • 范围:从 '1970-01-01 00:00:01' UTC'2038-01-19 03:14:07' UTC
  • 特性:自动初始化和更新为当前日期和时间。
CREATE TABLE TimestampExample (id INT AUTO_INCREMENT PRIMARY KEY,timestamp_col TIMESTAMP
);INSERT INTO TimestampExample (timestamp_col) VALUES ('2023-10-01 12:34:56');
INSERT INTO TimestampExample (timestamp_col) VALUES ('2023-12-31 23:59:59');-- 自动初始化和更新
CREATE TABLE AutoTimestampExample (id INT AUTO_INCREMENT PRIMARY KEY,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);INSERT INTO AutoTimestampExample (created_at) VALUES (DEFAULT);
UPDATE AutoTimestampExample SET id = id + 1 WHERE id = 1;
-- 查询所有 AutoTimestampExample 表中的数据
SELECT * FROM AutoTimestampExample;

在这里插入图片描述

4. 年份类型

YEAR
  • 描述:用于存储年份值,格式为 YYYYYY
  • 范围:从 '1901''2155'
CREATE TABLE YearExample (id INT AUTO_INCREMENT PRIMARY KEY,year_col YEAR
);INSERT INTO YearExample (year_col) VALUES (2023);
INSERT INTO YearExample (year_col) VALUES (1990);

查询示例

假设我们已经创建了上述表并插入了一些数据,现在我们可以查询这些数据:

-- 查询所有 DateExample 表中的数据
SELECT * FROM DateExample;-- 查询所有 TimeExample 表中的数据
SELECT * FROM TimeExample;-- 查询所有 DateTimeExample 表中的数据
SELECT * FROM DateTimeExample;-- 查询所有 TimestampExample 表中的数据
SELECT * FROM TimestampExample;-- 查询所有 YearExample 表中的数据
SELECT * FROM YearExample;-- 查询所有 AutoTimestampExample 表中的数据
SELECT * FROM AutoTimestampExample;

日期和时间函数

MySQL提供了许多内置函数来处理日期和时间数据。以下是一些常用的函数示例:

获取当前日期和时间
SELECT CURRENT_DATE(); -- 获取当前日期
SELECT CURRENT_TIME(); -- 获取当前时间
SELECT NOW();          -- 获取当前日期和时间
SELECT CURRENT_TIMESTAMP(); -- 获取当前日期和时间
日期和时间的格式化
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 格式化日期和时间
日期和时间的计算
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- 当前日期加上一天
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR); -- 当前时间减去一小时
提取日期和时间部分
SELECT YEAR(NOW()); -- 提取年份
SELECT MONTH(NOW()); -- 提取月份
SELECT DAY(NOW()); -- 提取日
SELECT HOUR(NOW()); -- 提取小时
SELECT MINUTE(NOW()); -- 提取分钟
SELECT SECOND(NOW()); -- 提取秒

通过这些示例,你可以看到如何在MySQL中使用不同的日期和时间类型来存储和查询数据。选择合适的数据类型和使用适当的函数可以让你更有效地处理日期和时间信息。

4. 二进制类型

在MySQL中,二进制类型用于存储二进制数据,如图片、文件或其他二进制流。以下是一些常见的二进制类型及其示例,包括如何创建表、插入数据以及查询数据。

1. 固定长度二进制类型

BINARY
  • 描述:固定长度的二进制字符串,最大长度为255个字节。
  • 存储:如果插入的字符串长度小于定义的长度,MySQL会用零字节填充到指定长度。
CREATE TABLE BinaryExample (id INT AUTO_INCREMENT PRIMARY KEY,binary_col BINARY(10)
);-- 插入二进制数据
INSERT INTO BinaryExample (binary_col) VALUES (UNHEX('48656C6C6F')); -- 'Hello'
INSERT INTO BinaryExample (binary_col) VALUES (UNHEX('576F726C64')); -- 'World'-- 查询数据
SELECT id, HEX(binary_col) AS hex_value FROM BinaryExample;

2. 可变长度二进制类型

VARBINARY
  • 描述:可变长度的二进制字符串,最大长度为65,535个字节。
  • 存储:实际存储时只占用实际长度加一个或两个字节(取决于行的长度)。
CREATE TABLE VarbinaryExample (id INT AUTO_INCREMENT PRIMARY KEY,varbinary_col VARBINARY(50)
);-- 插入二进制数据
INSERT INTO VarbinaryExample (varbinary_col) VALUES (UNHEX('48656C6C6F')); -- 'Hello'
INSERT INTO VarbinaryExample (varbinary_col) VALUES (UNHEX('576F726C64')); -- 'World'-- 查询数据
SELECT id, HEX(varbinary_col) AS hex_value FROM VarbinaryExample;

3. 大对象二进制类型

TINYBLOB
  • 描述:最多255个字节的二进制大对象。
  • 存储:最多255个字节。
CREATE TABLE TinyblobExample (id INT AUTO_INCREMENT PRIMARY KEY,tinyblob_col TINYBLOB
);-- 插入二进制数据
INSERT INTO TinyblobExample (tinyblob_col) VALUES (UNHEX('48656C6C6F')); -- 'Hello'
INSERT INTO TinyblobExample (tinyblob_col) VALUES (UNHEX('576F726C64')); -- 'World'-- 查询数据
SELECT id, HEX(tinyblob_col) AS hex_value FROM TinyblobExample;

在这里插入图片描述

BLOB
  • 描述:最多65,535个字节的二进制大对象。
  • 存储:最多65,535个字节。
CREATE TABLE BlobExample (id INT AUTO_INCREMENT PRIMARY KEY,blob_col BLOB
);-- 插入二进制数据
INSERT INTO BlobExample (blob_col) VALUES (UNHEX('48656C6C6F20576F726C64')); -- 'Hello World'
INSERT INTO BlobExample (blob_col) VALUES (LOAD_FILE('/path/to/file.jpg')); -- 插入文件内容-- 查询数据
SELECT id, HEX(blob_col) AS hex_value FROM BlobExample;
MEDIUMBLOB
  • 描述:最多16,777,215个字节的二进制大对象。
  • 存储:最多16,777,215个字节。
CREATE TABLE MediumblobExample (id INT AUTO_INCREMENT PRIMARY KEY,mediumblob_col MEDIUMBLOB
);-- 插入二进制数据
INSERT INTO MediumblobExample (mediumblob_col) VALUES (UNHEX('48656C6C6F20576F726C64')); -- 'Hello World'
INSERT INTO MediumblobExample (mediumblob_col) VALUES (LOAD_FILE('/path/to/large_file.jpg')); -- 插入大文件内容-- 查询数据
SELECT id, HEX(mediumblob_col) AS hex_value FROM MediumblobExample;
LONGBLOB
  • 描述:最多4,294,967,295个字节的二进制大对象。
  • 存储:最多4,294,967,295个字节。
CREATE TABLE LongblobExample (id INT AUTO_INCREMENT PRIMARY KEY,longblob_col LONGBLOB
);-- 插入二进制数据
INSERT INTO LongblobExample (longblob_col) VALUES (UNHEX('48656C6C6F20576F726C64')); -- 'Hello World'
INSERT INTO LongblobExample (longblob_col) VALUES (LOAD_FILE('/path/to/large_file.jpg')); -- 插入大文件内容-- 查询数据
SELECT id, HEX(longblob_col) AS hex_value FROM LongblobExample;

查询示例

假设我们已经创建了上述表并插入了一些数据,现在我们可以查询这些数据:

-- 查询所有 BinaryExample 表中的数据
SELECT id, HEX(binary_col) AS hex_value FROM BinaryExample;-- 查询所有 VarbinaryExample 表中的数据
SELECT id, HEX(varbinary_col) AS hex_value FROM VarbinaryExample;-- 查询所有 TinyblobExample 表中的数据
SELECT id, HEX(tinyblob_col) AS hex_value FROM TinyblobExample;-- 查询所有 BlobExample 表中的数据
SELECT id, HEX(blob_col) AS hex_value FROM BlobExample;-- 查询所有 MediumblobExample 表中的数据
SELECT id, HEX(mediumblob_col) AS hex_value FROM MediumblobExample;-- 查询所有 LongblobExample 表中的数据
SELECT id, HEX(longblob_col) AS hex_value FROM LongblobExample;

二进制数据的插入和查询

  1. 插入二进制数据

    • 使用 UNHEX 函数将十六进制字符串转换为二进制数据。
    • 使用 LOAD_FILE 函数从文件系统中加载二进制文件内容。
  2. 查询二进制数据

    • 使用 HEX 函数将二进制数据转换为十六进制字符串以便查看。

通过这些示例,你可以看到如何在MySQL中使用不同的二进制类型来存储和查询数据。选择合适的数据类型对于确保数据的准确性和性能非常重要。

5.枚举和集合

在MySQL中,枚举(ENUM)和集合(SET)是两种特殊的数据类型,用于存储一组预定义的值。它们在某些场景下非常有用,可以提高数据的完整性和查询效率。

1. 枚举(ENUM)

枚举类型允许你定义一个列,该列只能从一组预定义的值中选择。这些值在创建表时定义,并且在插入数据时必须是这些值之一。

创建表
CREATE TABLE EnumExample (id INT AUTO_INCREMENT PRIMARY KEY,status ENUM('New', 'Processing', 'Completed', 'Cancelled')
);
插入数据
INSERT INTO EnumExample (status) VALUES ('New');
INSERT INTO EnumExample (status) VALUES ('Processing');
INSERT INTO EnumExample (status) VALUES ('Completed');
INSERT INTO EnumExample (status) VALUES ('Cancelled');
查询数据
SELECT * FROM EnumExample;

在这里插入图片描述

注意事项
  • 枚举值是区分大小写的。
  • 如果插入的值不在预定义的枚举值中,MySQL会抛出错误。
  • 枚举值在内部是以整数形式存储的,从1开始编号。例如,‘New’ 对应 1,‘Processing’ 对应 2,依此类推。

2. 集合(SET)

集合类型允许你定义一个列,该列可以包含一组预定义值的任意组合。这些值在创建表时定义,并且在插入数据时可以是这些值的任意子集。

创建表
CREATE TABLE SetExample (id INT AUTO_INCREMENT PRIMARY KEY,permissions SET('Read', 'Write', 'Execute')
);
插入数据
INSERT INTO SetExample (permissions) VALUES ('Read');
INSERT INTO SetExample (permissions) VALUES ('Write');
INSERT INTO SetExample (permissions) VALUES ('Read,Write');
INSERT INTO SetExample (permissions) VALUES ('Read,Write,Execute');
查询数据
SELECT * FROM SetExample;

在这里插入图片描述

注意事项
  • 集合值是区分大小写的。
  • 如果插入的值不在预定义的集合值中,MySQL会抛出错误。
  • 集合值在内部是以位掩码的形式存储的,每个值对应一个位。例如,‘Read’ 对应 1,‘Write’ 对应 2,‘Execute’ 对应 4。

高级用法

枚举(ENUM)的内部存储

枚举值在内部是以整数形式存储的。你可以使用 ORD 函数获取枚举值的内部整数表示:

SELECT id, order_status, ORD(order_status) AS enum_value FROM Orders;
集合(SET)的内部存储

集合值在内部是以位掩码的形式存储的。你可以使用 FIND_IN_SET 函数检查某个值是否存在于集合中:

SELECT id, roles, FIND_IN_SET('Admin', roles) AS has_admin FROM UserRoles;

总结

枚举(ENUM)和集合(SET)是MySQL中非常有用的特殊数据类型,可以用来限制列的值,确保数据的完整性和一致性。

选择合适的数据类型

选择合适的数据类型对于数据库性能和存储效率非常重要。以下是一些选择数据类型的建议:

  • 尽量使用最小的合适类型:例如,如果一个列只需要存储0到100之间的整数,使用 TINYINT 而不是 INT
  • 避免使用不必要的大字段:例如,如果一个列只需要存储少量文本,使用 VARCHAR(255) 而不是 TEXT
  • 考虑数据的精度和范围:例如,对于货币计算,使用 DECIMAL 而不是 FLOATDOUBLE 以确保精度。
  • 使用适当的时间类型:例如,如果只需要存储日期,使用 DATE 而不是 DATETIME

通过合理选择数据类型,你可以优化数据库的性能并减少存储空间的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62814.shtml

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

相关文章

Linux的基本操作及虚拟机设置

文章目录 Linux的目录结构Linux中的常见目录 VI和VIM编辑器什么是VI和VIM编辑器VIM的一般模式VIM的编辑模式VIM的命令模式模式间的切换 虚拟机网络配置查看网络信息修改网络配置信息查看和修改主机名服务管理类命令 虚拟机管理操作VMware为虚拟机拍摄快照VMware为虚拟机执行克隆…

【前端】安装hadoop后,前端启动报错,yarn命令

新安装hadoop后,前端启动项目用yarn命令,报错。 报错:系统找不到指定的路径。 No HADOOP_CONF_DIR set. Please specify it either in yarn-env.cmd or in the environment. 解决:删掉hadoop目录下yarn的文件 检查:…

神经网络入门实战:(九)分类问题 → 神经网络模型搭建模版和训练四步曲

(一) 神经网络模型搭建官方文档 每一层基本都有权重和偏置,可以仔细看官方文档。 pytorch 官网的库:torch.nn — PyTorch 2.5 documentation Containers库:用来搭建神经网络框架(包含所有的神经网络的框架)&#xff1b…

[382]基于springboot的辽B代驾管理系统

毕 业 设 计(论 文) 题目:辽B代驾管理系统 摘 要 使用旧方法对辽B代驾管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在辽B代驾管理系统的管理上面可以解决许多信息管理上面的难题,比…

使用Grafana K6来测测你的系统负载能力

背景 近期我们有个号称会有很高很高并发的系统要上线,为了测试一下自己开发的系统的负载能力,准备了点海克斯科技,来看看抗不抗的住。 之前笔者写过用Apache JMeter进行压力测试的文章(传送门👉:https://…

Fastadmin的定时任务详解

文章目录 Fastadmin的定时任务详解一、引言二、实现定时任务1、创建定时任务控制器2、配置定时任务 三、使用示例1. 编写备份脚本2. 配置定时任务3. 测试定时任务4. 监控备份结果 四、总结 Fastadmin的定时任务详解 一、引言 FastAdmin是一款基于ThinkPHP框架开发的后台管理系…

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方:仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…

QT工程,它该怎么学?

在现代软件开发中,QT因其强大的跨平台能力和友好的用户界面设计工具,成为开发者学习和应用的热门选择。特别是在Linux系统下,如何安装、配置QT开发环境,以及创建和管理QT工程是入门QT开发的关键环节。本文将从安装QT开发环境开始&…

Java中的“抽象类“详解

1.抽象类的定义 在面向对象的概念中,所有的对象都是通过,类来描述的,但是反过来,不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类 抽象类的概念是比较抽象的,比如现在有一个"父类"是"动物类",继…

【Code First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

【C++】字符与ASCII码转换的深度探讨

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目一:打印ASCII码代码实现代码分析代码优化优化思路 💯题目二:打印字符代码实现代码分析代码优化优化思路 💯C中字符与ASC…

计算机毕业设计Spark+SpringBoot旅游推荐系统 旅游景点推荐 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

C++实现Raft算法之更多的细节(clerk与RPC)

本篇细节讲解的是clerk和RPC原理的讲解 clerk clerk相当于是一个外部的客户端,其作用就是向整个raft集群发起命令并接收响应。 clerk需要与kvServer建立网络链接,那么既然已经实现了已经简单的RPC,那么使用RPC来完成这个过程。 clerk本身的…

基于C#+SQLite开发数据库应用的示例

SQLite数据库,小巧但功能强大;并且是基于文件型的数据库,驱动库就是一个dll文件,有些开发工具 甚至不需要带这个dll,比如用Delphi开发,用一些三方组件;数据库也是一个文件,虽然是个文…

C++之异常智能指针其他

C之异常&智能指针&其他 异常关于函数异常声明异常的优劣 智能指针auto_ptrunique_ptrshared_ptrweak_ptr定制删除器 智能指针的历史与boost库 特殊类单例模式饿汉和懒汉的优缺点 C四种类型转换CIO流结语 异常 try括起来的的代码块中可能有throw一个异常(可…

Ubuntu 20.04 Server版连接Wifi

前言 有时候没有网线口插网线或者摆放电脑位置不够时,需要用Wifi联网。以下记录Wifi联网过程。 环境:Ubuntu 20.04 Server版,无UI界面 以下操作均为root用户,如果是普通用户,请切换到root用户,或者在需要权…

Java项目实战II基于微信小程序的亿家旺生鲜云订单零售系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互联网技术的不断…

Javaweb梳理21——Servlet

Javaweb梳理21——Servlet 21 Servlet21.1 简介21.3 执行流程21.4 生命周期4.5 方法介绍21.6 体系结构21.7 urlPattern配置21.8 XML配置 21 Servlet 21.1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。使用Servlet就可以实现&…

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…

Unity-Particle System属性介绍(一)基本属性

什么是ParticleSystem 粒子系统是Unity中用于模拟大量粒子的行为的组件。每个粒子都有一个生命周期,包括出生、运动、颜色变化、大小变化和死亡等。粒子系统可以用来创建烟雾、火焰、水、雨、雪、尘埃、闪电和其他各种视觉效果。 开始 在项目文件下创建一个Vfx文件…