数据库基础与安装

写给初学者:每个概念都从”为什么需要它”开始讲,配合通俗比喻和完整可运行 SQL。


一、前置知识:数据库是什么?

1.1 没有数据库的世界

假设你经营一家小型网店,开始的时候用 Excel 记录订单:

订单号客户商品数量金额日期
1张三键盘12992025-01-15
2李四鼠标22982025-01-16
3张三显示器119992025-01-17

Excel 的致命问题:

  • 数据多了卡死——10 万行打开要 30 秒

  • 多人同时编辑会冲突——“文件已被其他人锁定”

  • 误删一行,Ctrl+Z 可能救不回来

  • 没法让程序自动读写——网页后台不可能去操作 Excel

数据库就是解决这些问题的——能存海量数据、支持多人同时访问、操作可回滚、程序可以调用。

1.2 通俗类比:数据库 = 仓库

概念类比解释
数据库(Database)一个仓库一个仓库里放很多货架
表(Table)仓库里的一个货架比如”用户表""订单表”,每个货架存一类东西
行(Row / 记录)货架上的一件货物比如用户表里的一行 = 一个用户的信息
列(Column / 字段)货物上的标签name、age、email 这些都属于”列”
SQL你给仓库管理员下达的指令”帮我拿张三的订单""把李四的邮箱改了”

你写 SQL → MySQL 执行 → 操作仓库里的货架。

1.3 MySQL 安装与连接

Windows 安装:

  1. https://dev.mysql.com/downloads/installer/ 下载 MySQL Installer

  2. 安装时选 “Developer Default”,一路 Next

  3. 记住你设置的 root 密码(root 是最高权限用户)

连接 MySQL 有两种方式:

方式怎么打开适用场景
命令行mysql -u root -p 然后输密码服务器上没有图形界面时
图形化工具Navicat、DBeaver、DataGrip、MySQL Workbench日常开发(强烈推荐初学者用)

连接成功后你会看到:

 
mysql>
 

TIP

初学者安装 DBeaver(免费)或 DataGrip(JetBrains 全家桶),比命令行直观得多——能看到表结构、能一键执行 SQL、出错有高亮提示。


二、建库(CREATE DATABASE)

2.1 为什么先建库?

你要往仓库里放货架,首先得有个仓库。建库就是”盖仓库”。

2.2 基本语法

 
-- 创建数据库
 
CREATE DATABASE my_shop;
 
-- 查看有哪些数据库
 
SHOW DATABASES;
 
-- 进入这个数据库(之后的操作都在这个库里)
 
USE my_shop;
 
-- 删除数据库(危险操作!)
 
DROP DATABASE my_shop;
 

执行效果:

 
mysql> SHOW DATABASES;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| my_shop            |   -- ← 你刚创建的
 
| mysql              |
 
+--------------------+
 

2.3 命名规范

 
-- ✅ 好的命名
 
CREATE DATABASE my_blog;          -- 小写 + 下划线
 
CREATE DATABASE student_system;   -- 清晰表达用途
 
-- ❌ 不好的命名
 
CREATE DATABASE MyBlog;           -- 大小写混用(不同操作系统行为不一致)
 
CREATE DATABASE my-blog;          -- 含连字符(需要每次都加反引号)
 
CREATE DATABASE a;                -- 不知道干嘛的
 

IMPORTANT

规则:数据库名、表名、字段名统一用小写 + 下划线(snake_case)。 这不是语法要求,是社区约定,避免踩坑。


三、建表(CREATE TABLE)

3.1 为什么需要定义表结构?

建表就是”设计货架的形状”——这个货架有几层?每层放什么类型的东西?哪些格必须填?

表结构定义了:

  • 这个表有哪些列(字段)

  • 每列的类型是什么(数字?字符串?日期?)

  • 哪些列不能为空

  • 哪一列是唯一标识(主键)

3.2 数据类型速览

初学者只需记住这 5 种:

数据类型含义例子什么时候用
INT整数1, 99, -5年龄、数量、ID
VARCHAR(n)变长字符串,最长 n 个字符’张三’, ‘hello’姓名、邮箱(长度不固定)
CHAR(n)定长字符串,固定 n 个字符’M’, ‘F’性别、状态码(长度固定)
DECIMAL(m,n)精确小数,总共 m 位,小数 n 位299.99金额(不能用 FLOAT,会精度丢失!)
DATE日期’2025-01-15’生日、订单日期
DATETIME日期 + 时间’2025-01-15 14:30:00’订单时间、创建时间
BOOLEAN布尔值(实际存的是 0/1)TRUE, FALSE是否启用、是否删除
TEXT长文本’很长的文章内容…’文章正文、商品描述

金额为什么不能用 FLOAT?

FLOAT 是近似值,0.1 + 0.2 在计算机里可能是 0.30000000000000004。金额必须精确,所以用 DECIMAL(10,2)(总共 10 位,2 位小数 → 最多 99999999.99)。

3.3 第一个 CREATE TABLE

 
-- 先用一下前面建的库
 
USE my_shop;
 
-- 建用户表
 
CREATE TABLE users (
 
    id         INT          PRIMARY KEY AUTO_INCREMENT,  -- 主键,自动递增
 
    username   VARCHAR(20)  NOT NULL UNIQUE,             -- 不能为空,不能重复
 
    email      VARCHAR(100) NOT NULL,                    -- 不能为空
 
    age        INT,                                      -- 可以为空
 
    balance    DECIMAL(10,2) DEFAULT 0.00,               -- 默认值 0.00
 
    created_at DATETIME     DEFAULT CURRENT_TIMESTAMP    -- 默认当前时间
 
);
 

逐行解释:

代码含义
PRIMARY KEY主键——唯一标识每一行。就像身份证号,绝对不能重复。
AUTO_INCREMENT自动递增——每次插入新数据,id 自动 +1,你不用管。
NOT NULL不能为空——这个字段必须填,不填就报错。
UNIQUE唯一——值不能重复。比如用户名,不能有两个人都叫 “admin”。
DEFAULT 0.00默认值——如果不传 balance,就自动填 0.00。
DEFAULT CURRENT_TIMESTAMP默认当前时间——不传就自动填此刻的时间。

3.4 查看表结构

 
-- 查看表结构
 
DESC users;
 
-- 查看建表语句(完整 SQL,包括默认值等细节)
 
SHOW CREATE TABLE users;
 

DESC users; 输出:

 
+------------+---------------+------+-----+-------------------+-------------------+
 
| Field      | Type          | Null | Key | Default           | Extra             |
 
+------------+---------------+------+-----+-------------------+-------------------+
 
| id         | int           | NO   | PRI | NULL              | auto_increment    |
 
| username   | varchar(20)   | NO   | UNI | NULL              |                   |
 
| email      | varchar(100)  | NO   |     | NULL              |                   |
 
| age        | int           | YES  |     | NULL              |                   |
 
| balance    | decimal(10,2) | YES  |     | 0.00              |                   |
 
| created_at | datetime      | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
 
+------------+---------------+------+-----+-------------------+-------------------+
 

CAUTION

Null 列为 NO 且没有 DEFAULT 的字段,插入数据时必须在 INSERT 中明确提供值,否则整个语句会失败。 这个错误初学者很容易碰到。

3.5 再建一张订单表(含外键)

 
CREATE TABLE orders (
 
    id         INT          PRIMARY KEY AUTO_INCREMENT,
 
    user_id    INT          NOT NULL,                  -- 哪个用户的订单
 
    product    VARCHAR(100) NOT NULL,                  -- 商品名称
 
    price      DECIMAL(10,2) NOT NULL,                 -- 单价
 
    quantity   INT          NOT NULL DEFAULT 1,        -- 数量,默认 1
 
    total      DECIMAL(10,2) NOT NULL,                 -- 总价
 
    created_at DATETIME     DEFAULT CURRENT_TIMESTAMP
 
);
 

为什么要分开两张表? 如果订单直接写用户名,用户改名时所有历史订单都要改。用 user_id 关联,改用户名只改 users 表一次。

3.6 常见踩坑

 
-- ❌ 错误 1:忘了逗号
 
CREATE TABLE bad1 (
 
    id INT PRIMARY KEY
 
    name VARCHAR(20)   -- ← 上一行没逗号,报错!
 
);
 
-- ❌ 错误 2:最后一个字段后面有逗号
 
CREATE TABLE bad2 (
 
    id INT PRIMARY KEY,
 
    name VARCHAR(20),  -- ← 最后一个字段不能有逗号(MySQL 早期版本)
 
);
 
-- ❌ 错误 3:字段名用了保留字
 
CREATE TABLE bad3 (
 
    order INT,   -- ← order 是 MySQL 保留字,必须用反引号 `order`
 
    from VARCHAR(20)  -- ← from 也是保留字
 
);
 
-- ✅ 正确:用反引号包裹保留字
 
CREATE TABLE ok (
 
    `order` INT,
 
    `from` VARCHAR(20)
 
);
 

速查表

操作语法一句话解释
建库CREATE DATABASE 库名;盖一个仓库
删库DROP DATABASE 库名;炸掉仓库(不可逆)
选库USE 库名;进入这个仓库
建表CREATE TABLE 表名 (列定义...);设计一个货架的结构
查看表结构DESC 表名;看货架有几层、每层放什么
整型INT整数
变长字符串VARCHAR(n)最长 n 个字符
精确小数DECIMAL(m,n)共 m 位,小数 n 位
日期时间DATETIME日期 + 时间
长文本TEXT很长的文本内容

▶ 对应原理:01-MySQL索引B+树与聚簇非聚簇

速记卡(面试闪卡)

Q1:一句话讲清「数据库基础与安装」到底是什么?

A:本文讲数据库是什么、MySQL 安装连接,以及用 CREATE DATABASE / CREATE TABLE 建库建表。

Q2:二、建库(CREATE DATABASE) —— 怎么理解?

A:像先盖仓库再放货架:CREATE DATABASE 建库、SHOW DATABASES 看库、USE 进库;命名统一小写+下划线(Create Database)。

Q3:三、建表(CREATE TABLE) —— 怎么理解?

A:像设计货架形状:CREATE TABLE 定义列类型、主键、NOT NULL/UNIQUE,PRIMARY KEY 像身份证唯一标识每行(Create Table)。

Q4:速查表 —— 怎么理解?

A:像随身备忘卡:把建库/建表/常用类型(INT、VARCHAR、DECIMAL、DATETIME)浓缩成一页速查,金额用 DECIMAL 别用 FLOAT(Quick Reference)。

Q5:MySQL 安装与连接 —— 怎么理解?

A:像开店前领钥匙:Windows 下 MySQL Installer 装好记 root 密码,命令行 mysql -u root -p 或 DBeaver 图形工具连(Connection)。

Q6:核心速记主线有哪些?

  • 数据库:存海量数据、多人并发、可回滚,比作仓库

  • 建库:CREATE DATABASE + USE,命名 snake_case

  • 建表:定义列/类型/主键,金额用 DECIMAL 防精度丢

  • 连接:命令行或 DBeaver,记住 root 密码

口诀

A:数据库,像仓库,货架表格行列装

先建库,再建表,蛇形命名记心上

主键唯一 NOT NULL,金额 DECIMAL 别浮

命令行或 DBeaver,root 密码不能忘

相关链接


技术学习路线图 > 五、MySQL 实战

相关链接