一、 走进 MySQL 与数据库世界

先要搞清楚几个基本概念。日常生活中,我们的数据(比如微信聊天记录、淘宝订单)都是存在哪里的?答案就是数据库。

  • DB (Database - 数据库):存储数据的“大仓库”,数据在这里有组织地存放。
  • DBMS (Database Management System - 数据库管理系统):操纵和管理数据库的大型软件。MySQL 就是目前最流行的开源关系型 DBMS 之一。
  • SQL (Structured Query Language):操作关系型数据库的编程语言。

二、 环境搭建与数据模型初步

1. MySQL 的安装与启动

在学习之初,我们需要在电脑上安装 MySQL 服务端。安装完成后,MySQL 会在后台作为一个服务运行(Windows 下可以通过 services.msc 查看 MySQL 服务并启动/停止)。有了服务端,我们还需要客户端(比如命令行窗口、DataGrip 或 Navicat)去连接它,发送我们的 SQL 指令。

2. 关系型数据模型

MySQL 是关系型数据库。什么是关系型?
你可以把它想象成我们在 Excel 里建立的一个个表格。

  • 一个 MySQL 数据库服务器可以包含多个数据库
  • 一个数据库中可以包含多张表
  • 一张表包含多行多列。数据以行和列的形式存储,表与表之间还能建立联系。

三、 SQL 语法规范

1.语法规范

在正式写 SQL 之前,先记住几个通用规矩:

  1. SQL 语句可以单行或多行书写,必须以分号 ; 结尾
  2. SQL 语句不区分大小写,但为了规范,通常建议关键字大写
  3. 注释写给别人看,数据库不执行:单行注释用 --#,多行注释用 /* 注释内容 */

2.SQL 的分类

  • DDL (Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段)。(本文重点)
  • DML (Data Manipulation Language):数据操作语言,用来对表中的数据进行增删改。
  • DQL (Data Query Language):数据查询语言,用来查询表中的记录。
  • DCL (Data Control Language):数据控制语言,用来创建数据库用户、控制访问权限。

四、 核心实战:DDL 数据库操作

DDL 就像是建筑工地上的图纸和挖土机,它决定了你的数据仓库长什么样。我们先从“数据库”层面的操作开始:

-- 1. 查询所有数据库
SHOW DATABASES;

-- 2. 创建一个新的数据库 (例如命名为 test_db)
CREATE DATABASE test_db;
-- 更稳妥的写法:如果不存在才创建
CREATE DATABASE IF NOT EXISTS test_db;

-- 3. 删除数据库 (极其危险的操作,跑路必备,慎用!)
DROP DATABASE test_db;

-- 4. 切换/使用某个特定的数据库 (非常重要,建表前必须先进入数据库)
USE test_db;

-- 5. 查看当前正在使用的数据库
SELECT DATABASE();

五、 MySQL 常用数据类型

在数据库设计中,选择正确的数据类型就像是为衣服选择合适的尺码。选大了浪费空间(影响查询性能),选小了数据装不下(报错)。

1. 数值类型:精准控制存储空间

MySQL 提供了多种整数和浮点数类型,主要区别在于取值范围占用空间

类型 大小 (字节) 有符号范围 (Signed) 无符号范围 (Unsigned) 适用场景
TINYINT 1 Byte -128 到 127 0 到 255 年龄、状态标志(如 0:禁用, 1:启用)
INT 4 Bytes 约 ±21 亿 0 到 约 42 亿 标准 ID、数量计数
BIGINT 8 Bytes 极大( 2 63 − 1 2^{63}-1 2631 极大( 2 64 − 1 2^{64}-1 2641 雪花算法 ID、短视频播放量、大型网站用户量
DOUBLE 8 Bytes 很大 很大 科学计算、坐标经纬度(允许轻微舍入误差)
DECIMAL 取决于精度 灵活 灵活 金钱、财务数据(不丢失精度的定点数)

进阶提示: 对于金额,通常不推荐使用 DOUBLE,因为它存在精度丢失问题。金融行业要么用 DECIMAL(10, 2),要么直接用 INT 存“分”。

2. 字符串类型:性能与空间的权衡

这是最容易混淆的部分,核心在于“固定”与“变长”。

  • CHAR(n)定长字符串
    • 特点:无论你存多少字符,都会占用固定的 n n n 个字符空间。如果存的内容不满 n n n,MySQL 会在右边补空格。
    • 优点:读写速度快,因为长度固定,数据库能快速定位。
    • 场景:身份证号(18位)、MD5加密后的密码(32位)、性别(男/女)。
  • VARCHAR(n)变长字符串
    • 特点:存多少占多少(额外加 1-2 字节记录长度)。例如 VARCHAR(100) 存了 “MySQL”,实际只占约 6 字节。
    • 优点:极大地节省磁盘空间。
    • 场景:评论、个人简介、家庭地址。
  • TEXT / LONGTEXT长文本
    • 场景:存文章内容、非常长的详细描述。

3. 日期时间类型:让时间更有序

虽然可以用字符串存时间,但使用专门的时间类型可以让你轻松进行“入职满一年的员工”这类时间计算。

  • DATE
    • 格式YYYY-MM-DD
    • 范围:1000-01-01 到 9999-12-31
    • 场景:出生日期、入职日期。
  • DATETIME
    • 格式YYYY-MM-DD HH:MM:SS
    • 特点:存储的是绝对时间,不受时区变化影响。
    • 场景:订单下单时间、日志记录。
  • TIMESTAMP
    • 格式YYYY-MM-DD HH:MM:SS
    • 特点受时区影响。如果你在上海存入,美国的用户看到的是换算后的美国时间。
    • 范围:较窄(1970-2038年)。

六、 核心实战:DDL 表的创建、查询与修改

1. 表的创建 (CREATE)

在数据库里建表,就像是画 Excel 的表头。你需要明确这张表叫什么,有哪些列,每列存什么类型的数据。

语法格式:

CREATE TABLE [IF NOT EXISTS] 表名(
    字段名1 数据类型 [约束] [COMMENT '字段注释'],
    字段名2 数据类型 [约束] [COMMENT '字段注释'],
    ...
    字段名n 数据类型 [约束] [COMMENT '字段注释']
) [COMMENT '表注释'];
  • [] 括号里的内容:代表是可选的。比如 IF NOT EXISTS 表示“如果这张表不存在我才创建”,这能有效防止表已存在时强行创建而报错。
  • 约束:用来限制该字段的数据规范(比如 PRIMARY KEY 主键,NOT NULL 不能为空等)。
  • COMMENT:强烈建议加上注释,这是程序员的良好美德,方便以后自己和同事看懂。注意:最后一个字段后面千万不要加逗号 ,

完整实例:
假设我们要创建一张标准的“用户表” users

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY COMMENT '用户唯一ID,设为主键',
    username VARCHAR(50) NOT NULL COMMENT '用户名,不能为空',
    age TINYINT COMMENT '年龄',
    gender CHAR(1) COMMENT '性别,如M/F'
) COMMENT '用户基本信息表';

2. 表的查询 (SHOW & DESC)

表建好之后,我们需要核对一下是否创建成功,或者想看看别人建的表是什么结构的。

语法格式与作用:

  • SHOW TABLES;
    • 作用:查看当前所在数据库下的所有表名。
  • DESC 表名; (全拼是 DESCRIBE)
    • 作用:查看指定表的“内部结构”(字段名、数据类型、是否允许为空、是不是主键等),就像是查看表的体检报告。
  • SHOW CREATE TABLE 表名;
    • 作用:查看创建这张表时所使用的详细 SQL 语句(能看到所有的约束和注释)。

完整实例:

-- 看看当前数据库有哪些表,应该能看到 users
SHOW TABLES;

-- 查看 users 表的具体字段结构
DESC users;

3. 表结构的修改 (ALTER)

业务需求是不断变化的。表建好后,可能需要加新列、改列名、甚至删掉没用的列。这就需要用到 ALTER TABLE 语句。

语法格式与作用:

  • 添加字段 (ADD):
    • 格式ALTER TABLE 表名 ADD 字段名 数据类型 [注释] [约束];
    • 作用:在表的最后面追加一列新数据。
  • 修改字段类型 (MODIFY):
    • 格式ALTER TABLE 表名 MODIFY 字段名 新数据类型;
    • 作用不改字段名字,只改变该字段的数据类型或长度。
  • 修改字段名和类型 (CHANGE):
    • 格式ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [注释];
    • 作用:不仅能改数据类型,还能连着字段名一起改掉
  • 删除字段 (DROP):
    • 格式ALTER TABLE 表名 DROP 字段名;
    • 作用:把某一列及其包含的所有数据彻底删掉。

完整实例:

-- 1. 【加一列】老板让加个手机号
ALTER TABLE users ADD phone VARCHAR(11) COMMENT '手机号码';

-- 2. 【改类型】发现年龄存字符串更合适(虽然不符合常规,仅作示例)
ALTER TABLE users MODIFY age VARCHAR(3);

-- 3. 【改名字】觉得 username 不好听,改成 login_name,顺便把长度改成 100
ALTER TABLE users CHANGE username login_name VARCHAR(100) COMMENT '登录账号名';

-- 4. 【删一列】出于隐私保护,不再记录性别
ALTER TABLE users DROP gender;

4. 表的删除与清空 (DROP & TRUNCATE)

当一张表彻底废弃时,我们需要将其清理掉。这里有两个极其重要且容易混淆的命令。

语法格式与作用:

  • 删除整张表 (DROP):
    • 格式DROP TABLE [IF EXISTS] 表名;
    • 作用连根拔起。不仅删除了表里的所有数据,连同“表结构”(之前定义的列、类型)也一起销毁。执行后,这张表就彻底从数据库消失了。
  • 清空表数据 (TRUNCATE):
    • 格式TRUNCATE TABLE 表名;
    • 作用大扫除。底层逻辑是先用 DROP 把这张表删掉,然后再自动帮你 CREATE 一张一模一样的“空表”。最终结果是:表结构还在,但里面的数据全没了。

完整实例:

-- 毁灭性打击:直接让 users 表从世上消失
DROP TABLE IF EXISTS users;

-- 重头来过:保留 users 的表结构,但清空里面所有的用户数据
TRUNCATE TABLE users;

七、 DDL 阶段小结

到这里,我们已经完整掌握了 MySQL 基础中的 DDL 部分。总结一下,DDL 核心是对“结构”的操作,而不是对具体“数据”的操作

  • 库操作CREATE DATABASE, SHOW DATABASES, DROP DATABASE, USE
  • 表操作CREATE TABLE, SHOW TABLES, DESC, ALTER TABLE, DROP TABLE

掌握了如何搭建“数据库”和“表”这栋大楼的框架,接下来,我们就可以准备往里面塞家具(数据)了。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐