MySQL常用指令--标准的电商/后台管理系统基础结构

一.打开终端,输入指令

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。

总结图:

相关推荐
憧憬成为java架构高手的小白几秒前
黑马八股redis
数据库·redis·缓存
Reisentyan7 分钟前
[Advance]GoLang Learn Data Day 4
java·数据库·golang
曹牧37 分钟前
Oracle:UNIX时间戳
数据库·oracle·unix
XiaoLin laile42 分钟前
【无标题】
网络·数据库·人工智能
朝阳5811 小时前
MySQL 主从复制 — Docker 双机灾备方案
数据库·mysql·docker
染翰1 小时前
生产级 MySQL 内存占用过高排查指南
数据库·mysql
一 乐1 小时前
网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·网上订餐系统
guslegend1 小时前
第3节:智能体配置表设计
数据库·人工智能
jiayong231 小时前
MySQL 排序规则冲突问题与 utf8mb4_general_ci 统一方案
android·mysql·ci/cd
雷工笔记1 小时前
SQL系列2:PostgreSQL 日期时间字段类型选择指南
数据库·sql·postgresql