MySQL

创建库和表

MySQL 用 CREATE DATABASE / TABLE 建库建表:指定编码与引擎、use 切换库、desc 看结构、常见报错与 drop 注意事项。

前两天解决了「登录」和「地图」,今天开始真正动手搭仓库:创建数据库(库),再在库里创建表。学完你应能独立写出建库、建表语句,并用 desc 检查结构。

系列:MySQL 入门到查询 · 第 4 / 17 篇(第 4 天 · 4 月 24 日)
上一篇:登录与库表结构
下一篇:修改表结构
总目录:系列索引

环境说明

  • 已完成第 2~3 天:能登录 MySQL,理解库/表/行/列
  • 全部操作在 mysql> 提示符下进行
  • 练习库统一用 train(后续篇 SQL 均写 use train;,请不要改成别的库名,以免对不上)

1. 先分清:什么在改结构

类型英文干什么今天学吗
DDLData Definition Language建/改/删库和表的结构是(建与删)
DMLData Manipulation Language往表里插/改/删数据明天起
DQLData Query Language查询数据后面

今天语句都以 CREATE 开头,属于「定义结构」。

2. 与库有关的常用命令

2.1 查看有哪些库

show databases;

刚安装好的 MySQL 8 常见系统库(名字可能略有差别):

库名作用(了解)
information_schema元数据信息
mysql账号、权限等系统信息
performance_schema性能相关
sys系统视图辅助

警告:系统库不能删、不要随意改。练习请新建自己的业务库。

2.2 创建库

语法:

create database 库名;

指定文字编码:

create database 库名 charset 编码;

示例:

create database train;

成功提示类似:

Query OK, 1 row affected

再建一个用 gbk 的库(对比用):

create database train_gbk charset gbk;

2.3 进入库(切换「当前文件夹」)

use train;

成功提示:

Database changed

查看当前在哪个库:

select database();
时机可能的结果
刚登录、还没 useNULL(还不在任何业务库)
use train; 之后train

2.4 查看库的编码

show create database train;

结果里注释或 DEFAULT CHARACTER SET 附近,会写明编码(常见 utf8mb4)。

show create database train_gbk;

应能看到 gbk。

2.5 编码继承(建表前记牢)

建库:不写 charset → 用 MySQL 默认(本机常为 utf8mb4)
建表:不写 charset → 继承所在库

所以:库的编码建错,后面表和数据也容易跟着乱——业务库建库时就写上 charset utf8mb4 更稳妥。

create database train charset utf8mb4;

若库已存在且编码不对,可用(进阶,改完只影响以后新建的表):

-- alter database train charset utf8mb4;

3. 创建表

3.1 语法骨架

create table 表名(
    列名 类型,
    列名 类型,
    ...
);

可选:指定编码与存储引擎:

create table 表名(
    列名 类型,
    列名 类型
) charset=utf8mb4 engine=InnoDB;
部分说明
表名 / 列名建议英文 + _,见名知意
类型第 3 天学过的 int / varchar(n) / double / datetime 等
逗号列与列之间用英文逗号分隔
分号 ;整句结束
charset不写则继承库
engine不写常用默认 InnoDB

3.2 为什么要换行写

课堂笔记里的好习惯:

  1. 复杂语句先在记事本里写好,检查后再贴到 mysql>
  2. 每一列占一行,报错时容易对上行号

3.3 实战:商品表 goods

设计:

列名类型含义
idint商品编号
namevarchar(30)商品名称
pricedouble价格
sale_datedatetime上架日期

在 train 库中执行:

use train;

create table goods(
    id int,
    name varchar(30),
    price double,
    sale_date datetime
);

成功:Query OK。

再建一张更简单的练习表:

create table phone(
    id int,
    brand varchar(20),
    price double
);

3.4 建表时指定编码和引擎(对比)

create table goods_gbk(
    id int,
    name varchar(30)
) charset=gbk engine=MyISAM;

入门建议:新表用默认 InnoDB + 库的 utf8mb4 即可;MyISAM 仅作了解。

4. 检查:库里有哪些表、表长什么样

4.1 列出当前库的表

show tables;
输出含义
Empty set还没有任何表
列表中出现 goods、phone创建成功

4.2 查看表结构:desc

desc goods;

典型输出(示意):

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | YES  |     | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| price     | double      | YES  |     | NULL    |       |
| sale_date | datetime    | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
列先理解成
Field列名
Type数据类型
Null是否允许为空(约束后面细讲)
Key是否有键(主键等,后面讲)
Default默认值
Extra额外属性(如自动编号)

desc 也可写成 describe 表名;。

4.3 查看建表语句 / 引擎 / 编码

show create table goods;

最后一行常见:

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

说明:用 InnoDB,编码继承了库(utf8mb4)。

show create table goods_gbk;

对比 ENGINE 与 CHARSET 是否与你建表时一致。

4.4 了解:数据到底存在哪个文件夹(Windows)

show variables like '%datadir%';

结果路径常见类似:

C:\ProgramData\MySQL\MySQL Server 8.0\Data\

资源管理器打开后,你通常能看到:

  • 以库名命名的文件夹(如 train)
  • 进入后可见表相关文件;InnoDB 表常见 .ibd

只参观即可,不要手工删除或改这些文件;管理数据请用 SQL。

5. 完整跟练脚本(可整段复制)

建议在记事本写好后分段执行:

-- 1) 登录后
show databases;
select database();

-- 2) 建库并进入
create database train charset utf8mb4;
use train;
select database();
show create database train;

-- 3) 建表
create table goods(
    id int,
    name varchar(30),
    price double,
    sale_date datetime
);

create table phone(
    id int,
    brand varchar(20),
    price double
);

-- 4) 检查
show tables;
desc goods;
show create table phone;

期望

  • show tables; 能看到 goods、phone
  • desc goods; 四列类型正确
  • select database(); 为 train

6. 删除表与删库(慎用)

drop table 表名;
drop database 库名;

示例(仅当你确认练习库可删时):

drop table goods_gbk;
show tables;

drop database train_gbk;
show databases;

警告:drop 会删掉结构,表里的数据也没了。
警告:绝不 drop 系统库 mysql / sys / information_schema / performance_schema。

删除表和「清空表数据」不同:清空数据在后面 DML 会讲 truncate;drop 连表定义一起去掉。

7. 常见报错怎么读

7.1 You have an error in your SQL syntax

检查点说明
at line N大约第 N 行附近有问题(也可能是上一行末尾)
to use near '...'引号里是出错位置附近的片段
英文逗号 / 分号是否漏了、写成了中文逗号 ,
括号create table 的 ( ) 是否成对
类型varchar 是否写了 varchar(30) 这种长度

7.2 Database exists / Table already exists

库或表名重复。可以:

show databases;
show tables;

换一个名字,或(确认是练习对象后)先 drop 再建。MySQL 里也可写成(较新版本支持):

create database if not exists train charset utf8mb4;
create table if not exists phone(
    id int,
    brand varchar(20),
    price double
);

7.3 No database selected

ERROR 1046 (3D000): No database selected

原因:还没 use 库就建表/查表。

use train;
show tables;

7.4 Unknown database

use db999;

若库不存在会报 Unknown database。先 show databases; 核对名字。

8. 命名与书写习惯(少踩坑)

习惯说明
英文命名库表列名用 goods、sale_date,避免中文名
小写 + 下划线与系列文章一致,好读好搜
关键字不冲突不要用 order、user 等直接当列名;必须用时加反引号 `order`(入门可先避开)
语句分号每一句以 ; 结束
大小写关键字大小写不敏感(CREATE/create 皆可);库名表名在 Linux 服务器上可能区分大小写,练习时统一小写更省心

9. 速查表

目标语句
看所有库show databases;
建库create database 库名;
建库并指定编码create database 库名 charset utf8mb4;
进入库use 库名;
当前库select database();
看库编码show create database 库名;
建表create table 表名(列 类型, ...);
看当前库表show tables;
看表结构desc 表名;
看表引擎/编码show create table 表名;
删表 / 删库drop table / drop database(慎用)

10. 今天的练习清单

  • create database train charset utf8mb4; 并 use train;
  • 创建 goods(4 列)与 phone(3 列)
  • show tables; 看到两张表
  • desc goods; 核对列名与类型
  • show create table goods; 确认 ENGINE / CHARSET
  • (可选)再建 train_gbk charset gbk,用 show create database 对比
  • (可选)show variables like '%datadir%'; 并在资源管理器里「看一眼」

常见错误

易错:没 use 就 create table,报 No database selected。
易错:忘记分号,提示符变成 ->。
易错:中文逗号导致语法错误。
易错:varchar 不写长度。
易错:误 drop 系统库或练习数据未备份就 drop 业务表。
易错:库表名用了中文或大写混用,后面环境一换就不一致。

小结

  1. 建库:create database train charset utf8mb4;,再用 use train; 进去。
  2. 建表:create table 表名(列名 类型, ...);,一列一行更清晰。
  3. 检查:show tables;、desc 表名;、show create table 表名;。
  4. drop 很危险,系统库绝对不删。
  5. 下一篇学习 ALTER 修改表结构:改表名、加列、改类型等。

系列导航:总目录 · 上一篇:登录与库表结构 · 下一篇:修改表结构

相关阅读

全部文章 →
← 返回列表更多「MySQL」