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。

总结图:

相关推荐
2403_883261092 小时前
如何用 nodeType 与 nodeName 准确判断当前节点的物理类型
jvm·数据库·python
qq_413502022 小时前
如何利用 Block Tree 避免不必要的子组件重渲染?Vue3 编译黑科技
jvm·数据库·python
丑八怪大丑2 小时前
SQL数据类型
java·数据库·sql
m0_624578592 小时前
CSS定位如何实现多行文字垂直居中_通过绝对定位模拟表格
jvm·数据库·python
李温候2 小时前
互联网大厂Java求职者面试全攻略
java·数据库·面试·orm·构建工具·web框架·互联网大厂
dfdfadffa3 小时前
mysql如何排查网络延迟引起的数据库连接问题_使用ping测试
jvm·数据库·python
2303_821287383 小时前
JavaScript中Redux-Thunk处理异步Action的任务流
jvm·数据库·python
月落归舟3 小时前
数据库必学的五大核心约束
数据库
2301_782040453 小时前
JavaScript中类 Class 语法的可读性与维护性优势
jvm·数据库·python