【技术专题】Mysql8 数据库 - Mysql8 数据类型简介 & 数据库基本操作

0 阅读6分钟

大家好,我是锋哥。最近连载更新Mysql8,数据库开发技术专题。

mysql8-cover-16x9.jpg

本课程主要介绍和讲解 Mysql8简介,安装以及配置,客户端sqlyog安装以及配置,数据库基本操作,数据库表基本操作,查询数据,添加,修改,删除数据,索引,视图,触发器,常用函数,存储过程和函数。同时也配套视频教程 《一天学会 Mysql8 数据库 视频教程》

Mysql8 数据类型简介

MySQL 8 的数据类型大致分为:数值、日期时间、字符串/二进制、JSON、空间、其他。选型时重点关注:精度、存储空间、是否受时区影响、是否可索引。

1. 数值类型

类型说明
TINYINT1 字节,-128127;UNSIGNED 0255
SMALLINT2 字节,-32768~32767
MEDIUMINT3 字节
INT / INTEGER4 字节,常用整数
BIGINT8 字节,大整数,常用作自增主键
DECIMAL(M,D) / NUMERIC定点数,精确,适合金额。M 最大 65,D 最大 30
FLOAT4 字节,近似浮点
DOUBLE8 字节,近似浮点
BIT(M)位类型,M 为 1~64
BOOL / BOOLEAN是 TINYINT(1) 的同义词,0/1

注意:MySQL 8.0.17 起,整数的显示宽度如 INT(11) 和 ZEROFILL 已弃用,不建议依赖。

2. 日期时间类型

类型说明
DATE日期,YYYY-MM-DD,范围 1000-01-01 ~ 9999-12-31
TIME时间,HH:MM:SS,范围 -838:59:59 ~ 838:59:59
DATETIME日期时间,范围 1000 ~ 9999,与时区无关
TIMESTAMP时间戳,按 UTC 存储,受时区影响,范围到 2038-01-19
YEAR年份,通常 1901~2155 和 0000

TIME、DATETIME、TIMESTAMP 支持小数秒,如 DATETIME(6),精度 0~6。

3. 字符串与二进制类型

类型说明
CHAR(M)定长字符串,M 为字符数,0~255
VARCHAR(M)变长字符串,M 为字符数,最大 65535 字节,受字符集和行大小限制
BINARY(M) / VARBINARY(M)定长/变长二进制串,M 为字节数
TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT文本大对象,最大约 255B / 64KB / 16MB / 4GB
TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB二进制大对象,大小同上
ENUM枚举,只能取一个值
SET集合,可取多个值
JSON二进制存储的 JSON,自动校验,支持 JSON 函数和多值索引

MySQL 8 默认字符集是 utf8mb4,默认排序规则通常是 utf8mb4_0900_ai_ci。utf8 在 MySQL 8 中是 utf8mb3 的别名,建议使用 utf8mb4。

4. 空间类型

MySQL 8 支持 GIS 空间数据类型:

  • GEOMETRY
  • POINT
  • LINESTRING
  • POLYGON
  • MULTIPOINT
  • MULTILINESTRING
  • MULTIPOLYGON
  • GEOMETRYCOLLECTION

支持 SRID 属性,InnoDB 支持空间索引。

5. 其他重要特性

  • AUTO_INCREMENT:自增,通常用于整数主键。
  • UNSIGNED:无符号,扩大正数范围。
  • DEFAULT:默认值;MySQL 8.0.13+ 支持表达式默认值。
  • 生成列:VIRTUAL / STORED,可基于其他列计算。
  • 不可见列:INVISIBLE。
  • CHECK 约束:MySQL 8.0.16+ 正式支持。
  • BLOB、TEXT、JSON 等类型在 8.0.13+ 可用表达式方式设置默认值。

6. 选型建议

  • 金额:用 DECIMAL,不要用 FLOAT/DOUBLE。
  • 主键:常用 BIGINT UNSIGNED AUTO_INCREMENT。
  • 时间:需要时区转换用 TIMESTAMP;范围大且不想受时区影响用 DATETIME。
  • 普通字符串:VARCHAR;定长短字符串:CHAR。
  • 长文本:TEXT;二进制文件:BLOB。
  • 半结构化数据:JSON,但经常查询的字段建议抽成普通列或生成列并加索引。
  • 布尔值:可用 TINYINT(1) 或 BOOL。
  • 枚举:ENUM/SET 简单但修改麻烦,复杂场景可用 TINYINT + 字典表。

总体原则:精确优先、够用就好、能索引的字段尽量用普通类型,谨慎使用大对象和 JSON。

Mysql8 数据库基本操作

1,数据库简介

定义:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

MySQL 8 特性说明:

  • 在 MySQL 8 中,数据库(Database)和模式(Schema)是同义词(CREATE DATABASE 和 CREATE SCHEMA 效果完全一样)。
  • MySQL 8 默认的字符集为 utf8mb4,默认排序规则为 utf8mb4_0900_ai_ci,能够更好地支持 Emoji 等特殊字符。

2,显示所有数据库

基本语法:

SHOW DATABASES;

操作说明:

  • SQL 语句不区分大小写(show databases; 也可以),但关键字建议大写。
  • 命令末尾必须带英文分号 ; 才能执行。
  • 执行该命令后,通常会看到 information_schema、mysql、performance_schema、sys 这四个默认的系统数据库。

默认第一次执行结果:

image.png

这四个数据库是 MySQL 安装完成后自带的系统数据库。它们分别是:

1. information_schema(信息数据库)

  • 含义:它是一个虚拟库(里面存放的都是视图,不是真实的物理表),主要用于存储数据库的元数据(即“关于数据的数据”)。
  • 作用:记录了当前 MySQL 实例中所有数据库、表、列、索引、权限、字符集等详细结构信息。
  • 常见用途:当你不知道某个库里有哪些表,或者某张表有哪些字段时,就可以通过查询这个库获取。例如: SELECT * FROM information_schema.tables WHERE table_schema = '你的数据库名';

2. mysql(核心系统数据库)

  • 含义:MySQL 的“户口本”和“控制中心”,是最重要的系统库。
  • 作用:存储了系统的用户账号、密码(加密后的)、权限设置、存储过程、事件调度信息等。它包含了 user、db、tables_priv 等核心权限表。
  • 常见用途:查看当前有哪些用户(SELECT user, host FROM mysql.user;),或者给用户分配权限(GRANT 语句底层就是修改这里的表)。
  • ⚠️ 警告:这个库绝对不可以随意删除或直接修改(除非你非常了解 MySQL 权限体系)。

3. performance_schema(性能模式数据库)

  • 含义:MySQL 5.5 引入的性能监控引擎。
  • 作用:主要用于监控 MySQL 服务器的运行性能。它收集了底层的各种性能指标,比如 SQL 执行耗时、锁等待、内存分配、I/O 情况等。
  • 常见用途:DBA(数据库管理员)排查性能瓶颈、分析慢 SQL 时,会查询这个库。它默认是开启的,对性能有极微小的影响,但为了排查问题,一般不建议关闭。

4. sys(系统数据库)

  • 含义:MySQL 5.7 引入,是对 performance_schema 和 information_schema 的高级封装。
  • 作用:performance_schema 的数据结构非常复杂,普通开发者很难看懂。sys 库把那些复杂的底层数据,转化成了更容易阅读和理解的视图。
  • 常见用途:比如你想看“当前哪个 SQL 最占 CPU”或者“当前有哪些会话正在阻塞”,直接查询 sys 库里的视图(如 sys.session、sys.schema_table_statistics)会方便得多。

3,创建数据库

基本语法:

CREATE DATABASE 数据库名;

MySQL 8 推荐写法: 为了防止数据库已存在而报错,通常加上 IF NOT EXISTS,并显式指定字符集。

CREATE DATABASE IF NOT EXISTS my_db 
DEFAULT CHARACTER SET utf8mb4 

4,删除数据库

基本语法:

DROP DATABASE 数据库名;

MySQL 8 推荐写法: 为了防止删除不存在的数据库时报错,通常加上 IF EXISTS。

DROP DATABASE IF EXISTS my_db;