一.打开终端,输入指令
java
mysql -uroot -p // 进入数据库
会提示输入密码。
密码为下载MySql时配置的初始密码
提示:
-u:mysql用户名,这里直接将用户名 root 挨着写在后边
-p:mysql密码,这里没有写会提示让输入,也可以直接挨着p写在后边
二.创建数据库(带注释)
-- 创建名为 mydb 的数据库,并添加注释
java
CREATE DATABASE IF NOT EXISTS mydb // IF NOT EXISTS:避免重复创建报错
CHARACTER SET utf8mb4 //CHARACTER SET 和 COLLATE:推荐统一使用 utf8mb4 支持 emoji 和多语言
COLLATE utf8mb4_unicode_ci
COMMENT '这是我的第一个数据库'; //给数据库加备注可选 ,不备注也行
-- 使用该数据库
java
USE mydb;
三.创建数据表(含主键 + 字段注释 + 表注释)
建数据表口令模版:
java
CREATE TABLE 表名 (
字段名 数据类型 约束条件 COMMENT '字段注释',
...
PRIMARY KEY (主键字段)
) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT '表注释';
完整案例:标准的电商/后台管理系统基础结构
java
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '项目核心数据库';
USE mydb;
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录用户名',
password_hash CHAR(64) NOT NULL COMMENT '密码哈希值(SHA256)',
email VARCHAR(100) NOT NULL COMMENT '注册邮箱',
phone VARCHAR(20) DEFAULT NULL COMMENT '手机号(可选)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1启用 0禁用',
last_login_at DATETIME DEFAULT NULL COMMENT '最后登录时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '资料更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
-- 创建订单表(示范外键关联)
CREATE TABLE IF NOT EXISTS orders (
order_id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
user_id INT UNSIGNED NOT NULL COMMENT '下单用户ID',
total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单总金额',
status TINYINT NOT NULL DEFAULT 0 COMMENT '订单状态:0待支付 1已支付 2已发货 3已完成 4已取消',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户订单表';
注意:
回车换行
每行末尾不要有空格。
最后一行必须有分号 ;
确保所有符号都是英文半角(特别是单引号 ' 和分号 ;)。
验证是否成功
java
-- 查看数据库列表
SHOW DATABASES;
-- 查看表列表
SHOW TABLES;
-- 查看表结构
DESCRIBE users;
DESCRIBE orders;
-- 查看建表语句(含注释)
SHOW CREATE TABLE users\G
SHOW CREATE TABLE orders\G
上面已经是完成的基础版本案列,可以直接用,下面的为详细解释参考,可按需参考
四.各个字段详细解释
1.id(主键)
bash
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
id : 字段名
INT : 整数类型。 // 类型
UNSIGNED : 无符号。意味着只能存正数(0~42亿),不能存负数。这样可以让主键范围翻倍。 // 条件
AUTO_INCREMENT: 自增。每插入一条新数据,ID 自动 +1(1, 2, 3...),无需手动指定。//条件
PRIMARY KEY : 主键。唯一标识每一行数据,不能为空,不能重复。一张表只能有一个主键。// 主键字段标识
2.username (用户名)
bash
username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录用户名',
VARCHAR(50) : 可变长度字符串。最多存 50 个字符。如果只存 "Bob",只占 3 个字符的空间,节省存储。
NOT NULL : 非空。注册时必须填用户名,不能留白。
UNIQUE: 唯一约束。确保没有两个用户叫同一个名字。
3.password_hash (密码)
bash
password_hash CHAR(64) NOT NULL COMMENT '密码哈希值(SHA256)',
CHAR(64) : 固定长度字符串。无论内容多短,都占用 64 个字符空间。
为什么用 CHAR? 因为 SHA256 加密后的字符串长度永远是固定的 64 位十六进制字符。用 CHAR 比 VARCHAR 性能略好。
NOT NULL : 密码必须有值。
4.email (邮箱)
bash
email VARCHAR(100) NOT NULL COMMENT '注册邮箱',
VARCHAR(100) : 可变字符串,最大 100 字符。
NOT NULL : 邮箱必填。
5.phone (手机号)
bash
phone VARCHAR(20) DEFAULT NULL COMMENT '手机号(可选)',
VARCHAR(20) : 手机号虽然是数字,但通常包含 +, -, 空格或前导 0,所以用字符串存储更安全。
DEFAULT NULL : 默认值为空。如果用户没填手机号,数据库里存的就是 NULL(表示"未知"或"无")
6.status (状态)
bash
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1启用 0禁用',
TINYINT : 极小整数。范围 -128 到 127(或 0-255 if unsigned)。非常适合存只有几种状态的值(如:男/女,开/关),极度节省空间。
DEFAULT 1: 默认值是 1(启用)。新用户注册默认就是启用状态.
7.last_login_at (最后登录)
bash
last_login_at DATETIME DEFAULT NULL COMMENT '最后登录时间',
DATETIME: 日期时间格式 YYYY-MM-DD HH:MM:SS。
DEFAULT NULL: 新用户还没登录过,所以默认为空。
8. created_at (创建时间)
bash
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
TIMESTAMP : 时间戳类型。
DEFAULT CURRENT_TIMESTAMP: 魔法属性。当你插入数据时如果不指定这个字段,MySQL 会自动填入当前的服务器时间。
9.updated_at (更新时间)
bash
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '资料更新时间'
ON UPDATE CURRENT_TIMESTAMP: 另一个魔法属性。每当这行数据被修改(Update)时,MySQL 会自动将这个字段更新为当前时间。常用于追踪数据最后变动时间。
10. order_id
bash
order_id BIGINT UNSIGNED ...
BIGINT : 大整数。范围极大(约 ±900 京)。
为什么用 BIGINT? 订单量可能非常大,INT (42亿) 可能不够用,或者为了配合分布式 ID 生成策略,通常订单 ID 会用更大的类型。
11.user_id (外键关联字段)
bash
user_id INT UNSIGNED NOT NULL COMMENT '下单用户ID',
这里只是定义了一个普通的整数字段,用来存用户的 ID。
关键点在下面的一行 FOREIGN KEY 。
12.total_amount (金额)
bash
total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00 ...
DECIMAL(10,2) : 高精度定点数。
10: 总共 10 位数字。
2: 其中 2 位是小数。
为什么不用 FLOAT/DOUBLE? 浮点数有精度丢失问题(比如 0.1 + 0.2 = 0.30000000000000004)。涉及金钱计算必须用 DECIMAL。
总结图:
