首页 > 数据库 >MySQL库表操作与数据类型:基础概念梳理

MySQL库表操作与数据类型:基础概念梳理

来源:互联网 2026-07-11 08:41:16

MySQL是C/S架构的关系型数据库,库为目录,表为二进制文件。SQL分DDL、DML、DCL三类。主要引擎有MyISAM和InnoDB。数据类型含数值、字符串、日期时间、枚举和集合。操作涉及建库、建表、修改、备份还原。

前言

MySQL 是当前最为主流的关系型数据库,也是后端开发人员必须掌握的核心技能。本文不涉及空泛理论,直接梳理 MySQL 最基础的关键知识,涵盖基本概念、C/S 架构、数据库与数据表的操作、SQL 分类、存储引擎、字符集与校验规则、备份还原,以及核心数据类型(数值、字符串、日期时间、enum/set 等)。结合大量命令示例与原理说明,读完即可上手实践,快速搭建 MySQL 知识体系,减少学习弯路。

MySQL 数据库初步认识

先厘清几个容易混淆的概念:mysql 是数据库的客户端程序,mysqld 是数据库服务端(也称数据库服务),而“数据库”通常指按特定结构在磁盘或内存中组织的数据集合。日常所说的“mysql”或“mysql数据库”,大多指整个 MySQL 体系——本质上它是一套基于 C/S 模式的网络服务。除 MySQL 外,还有 SQL Server 等其他数据库系统。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

有人可能会问:使用普通文件也能存储数据,为何非要采用数据库?因为文件本身缺乏完善的数据管理能力。而 MySQL 对 SQL 关键字不区分大小写,例如 create database t1;CREATE DATABASE t1; 效果相同。

MySQL库表操作与数据类型:基础概念梳理

服务器、数据库与表的关系

创建数据库,本质上是在 Linux 下建立一个目录。在数据库中创建表,就是在该目录下创建对应的二进制文件。因此,数据库的实质也是文件——只不过由数据库服务统一管理。安装数据库服务器,实际是安装了数据库管理系统程序,该程序可以管理多个数据库。

MySQL 体系的架构

MySQL库表操作与数据类型:基础概念梳理

MySQL 的基本使用

连接服务器

连接命令:mysql -h 主机地址 -P 端口号 -u 用户名 -p。例如 mysql -h 127.0.0.1 -P 3306 -u root -p。其中 -p 表示提示输入密码,输入时密码不回显。若省略 -h,则默认连接本机;省略 -P,则默认 3306 端口。因此 mysql -uroot -p 等同于 mysql -h 127.0.0.1 -P 3306 -u root -p 的简写。

SQL 的分类

SQL 按功能可分为三类:DDL(数据定义语言)用于维护存储数据的结构,例如 create;DML(数据操纵语言)用于操作数据,例如 insert;DCL(数据控制语言)负责权限管理和事务,例如 grant

存储引擎

存储引擎是数据库管理系统实现数据存储、索引建立、数据查询与更新等方法的具体实现。查看存储引擎可使用 show engines;,加上 G 可使显示更整齐。常用的引擎有 MyISAMInnoDB,其中 InnoDB 应用更广泛。

创建数据库

创建数据库的格式:create database [if not exists] db_name [create_specification...];。其中 create_specification 可指定字符集(character set charset_namecharset=charset_name)和校验规则(collate collation_namecollate=collation_name)。if not exists 表示若库不存在则创建,存在时仅给出警告而不报错。db_name 是数据库名称。若未指定字符集和校验规则,则使用配置文件中的默认值(通常为 utf8utf8_general_ci)。

示例:create database if not exists text1 charset=utf8 collate utf8_general_ci; 执行后,实际上是在 /var/lib/mysql 下创建一个目录。注意:不要在 MySQL 未启动时自行在该目录下手动创建,虽然可行,但不符合规范。

字符集和校验规则

查看系统默认字符集和校验规则

查看默认字符集:show variables like 'character_set_database';;查看默认校验规则:show variables like 'collation_database';。其中 % 是 LIKE 语句的通配符,例如 show variables like 'collation_%'; 会列出所有以 collation_ 开头的变量。

查看数据库支持的字符集和校验规则

查看支持的字符集:show charset;;查看支持的校验规则:show collation;。数据库字符集(编码集)决定了能够存储哪些类型的数据,例如 utf8 支持中文;校验集决定了字段的比较与排序方式。数据库对数据进行的任何操作,都必须保证操作与编码一致。

校验规则对数据库的影响

一个字符集通常对应多个校验规则。例如 utf8 的校验规则中,utf8_general_ci 不区分大小写,utf8_bin 区分大小写。

MySQL库表操作与数据类型:基础概念梳理

查看 MySQL 的连接情况

使用 show processlist 可以查看当前有哪些用户连接了本机的 MySQL。

使用数据库

数据库不能重命名——也不建议随意修改名称,因为上层应用可能依赖该库的名称。

查看数据库

show databases;

显示创建语句

show create database db_name; 会显示创建该数据库的完整语句,其中 /*!40100 default.... */ 并非注释,而是表示若 MySQL 版本大于 4.01 则执行该部分内容。

MySQL库表操作与数据类型:基础概念梳理

修改数据库

alter database db_name [alter_specification...];,规格参数与创建时相同。

删除数据库

drop database [if exists] db_name;,若加上 if exists,库不存在时仅给出警告而不报错。本质是删除 /var/lib/mysql 中的对应目录。

数据库的备份

备份是将创建数据库、创建表、导入数据的语句保存到备份文件中。语法:mysqldump -P3306 -u root -p [-B] 数据库名 > 备份文件路径。加上 -B 会包含创建数据库和切换数据库的语句;不加 -B 则需先手动创建库并切换。备份文件推荐使用 .sql 后缀。若只需备份几张表:mysqldump -u root -p 数据库名 表名1 表名2 ... > 文件路径。备份多个库:mysqldump -u root -p [-B] 库名1 库名2 ... > 文件路径。还原使用 source 备份文件完整路径;。切换数据库使用 use 数据库名;(无需先退出当前库)。在 MySQL 中可使用 system clear; 清屏。

MySQL 表的操作

创建表

创建表格式:

create table [if not exists] table_name (
    field1 datatype [其他属性如 comment '注释'],
    field2 datatype [其他属性],
    ...
) [character set 字符集] [collate 校验规则] [engine 存储引擎];

最后一个字段后不加逗号。其他属性无严格的书写顺序。最后一行若未指定,则采用配置文件默认值(存储引擎默认通常为 InnoDB)。comment 用于添加注释。注意不同存储引擎生成的文件不同:MyISAM 会生成 .frm(表结构)、.MYD.MYI(数据和索引分开存储);InnoDB 仅生成 .frm.ibd(数据和索引合并存储)。

MySQL库表操作与数据类型:基础概念梳理

示例:create table if not exists users(id int, name varchar(20) comment '用户名');

查看表

desc 表名; 查看表结构,返回字段名(Field)、类型(Type)、是否允许空(NULL)、索引类型(Key)、默认值(Default)、扩充(Extra)。需要查看创建时的详细信息,使用 show create table 表名; 或加 G 使显示更整齐。

MySQL库表操作与数据类型:基础概念梳理

MySQL库表操作与数据类型:基础概念梳理

MySQL库表操作与数据类型:基础概念梳理

修改表

修改表结构的常用命令:

  • alter table table_name add (column datatype [其他属性] [,...]); 默认在末尾增加,若想插入到某列之后,加 after column1;插入到开头则加 first
  • alter table table_name modify (column datatype [其他属性]); 修改字段属性。
  • alter table table_name rename [to] now_table_name; 修改表名,有无 to 效果相同。
  • rename table table_name to now_table_name, ...; 可一次修改多个表名,此处的 to 不可省略。
  • alter table table_name change 原列名 新列名 新列名的datatype [其他属性]; 修改列名。
  • alter table table_name drop (column1 [,...]); 删除字段。

注意:表名和列名不宜随意修改,上层代码需同步调整。若仅对一个字段进行操作,可以省略括号。

向表中插入数据:insert [into] 表名 values(字段值[,...]);insert [into] 表名 (列名1[,...]) values(字段值[,...]);

MySQL库表操作与数据类型:基础概念梳理

查询表中数据

select 要查的列名1[,...] from table_name; 查询所有列使用 select * from table_name;。这是查看表内的具体数据,而 desc 用于查看表结构。

MySQL库表操作与数据类型:基础概念梳理

删除表

drop [temporary] table [if exists] table_name1, table_name2 ...;temporary 仅删除临时表。例如 drop table if exists user1, user2;。也可以删除表中的单个属性:alter table 表名 drop primary key;

向 MySQL 插入非法数据时会被直接拦截——这保证了数据的合法性。

MySQL 数据类型的分类

MySQL库表操作与数据类型:基础概念梳理

数值类型

tinyint

tinyint [unsigned] 占用 1 字节,有符号范围 -128~127,无符号范围 0~255。通常建议避免使用 unsigned,若存储不下可换用更大的类型,但年龄字段使用 tinyint unsigned 较为合适。

bit

bit(M) 为位字段类型,M 表示比特位数,默认值为 1。例如 bit(3) 取值 0~7,插入时使用数字而非二进制字符串。

小数类型

float

float[(m, d)] [unsigned],m 指定显示长度,d 指定小数位数,占用 4 字节。例如 float(4,2) 范围 -99.99~99.99,加上 unsigned 则范围 0.00~99.99。精度不足会自动补零,精度过高会四舍五入,但若四舍五入后超出 m 则会报错。不指定 m,d 时,可在 float 范围内任意长度并保留原小数位数。

decimal

decimal(m, d) [unsigned],m 默认 10,d 默认 0。与 float 的主要区别在于精度更高——MySQL 5.0 之后 float 大约小数后 7 位便开始不准确,但 decimal 的精度远高于此。当然 float 固定占用 4 字节,而 decimal 占用的字节数与位数相关。

字符串类型

定长与变长的选择:定长浪费空间但效率高,变长按需分配。定长的意义在于预先分配固定空间,变长则在不超过自定义范围内动态分配。

char

char(L) 为固定长度字符串,L 是字符数(非字节),最大 255。注意单位是字符——中文、逗号等均算作一个字符。

varchar

varchar(L) 为可变长度字符串,L 也是字符数,最大 65535 字节。实际占用空间根据插入的字符串长度确定。L 的最大值受编码集和表总待分配空间影响,且 65535 需先减去 1~3 字节用于记录数据大小。例如 utf8 中一个字符占用 3 字节。

日期和时间的类型

常见三种类型:

  • date:格式 'yyyy-mm-dd',3 字节。
  • datetime:格式 'yyyy-mm-dd HH:ii:ss',范围 1000~9999,8 字节。
  • timestamp:格式同样为 'yyyy-mm-dd HH:ii:ss',插入时不填会自动填入当前时间。

enum 和 set

enum 用于多选一,set 用于多选多或多选一。例如 enum('男','女'),插入时可填 '男'1。例如 set('手机','电脑','平板'),插入时可填 '手机,电脑'11(二进制表示)。

查询严格匹配 set 中某个选项:select * from 表名 where 列名='选项';。查询包含某个选项(不要求唯一):select * from 表名 where find_in_set('选项', 列名);。若要匹配多个选项,可使用 and 连接多个条件。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。