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

更多推荐




所有评论(0)