电商系统通过主键和外键强制保障数据强一致性:用户表用自增INT主键;订单表外键关联用户并支持级联删除;订单明细表用联合主键与双外键锁定订单与商品关系,确保业务逻辑严谨可靠。

电商系统里用户下单后,订单必须对应真实存在的用户,商品库存变动必须关联到具体商品——这种强依赖关系靠主键和外键来硬性保障,不是靠程序员写代码去检查。
先建用户表:主键是身份锚点
第一步:执行建表语句,user_id 必须设为自增主键。
CREATETABLE users (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL);
这一步不能跳过,【主键缺失会导致后续所有外键无法建立】。自增INT比UUID更适合作为用户表主键——索引效率高,且电商系统通常不涉及跨库合并场景。
第二步:插入测试数据,验证主键自动递增是否生效。
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com'), ('bob', 'bob@example.com');
再建订单表:外键绑定用户身份
方法一:建表时直接定义外键约束
CREATETABLE orders (order_id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, user_id INT UNSIGNED NOT NULL, total_amount DECIMAL(10,2) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE);
ON DELETE CASCADE 表示:用户被删,其所有订单自动清除。这是电商常见策略,避免留下“孤儿订单”污染数据。
方法二:已有订单表,后期添加外键
ALTER TABLE orders ADD COLUMN user_id INT UNSIGNED;
ALTER TABLE orders ADD CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT;
【ON DELETE RESTRICT 是默认行为,意味着只要该用户还有订单,就删不掉用户记录】。适合需要审计留痕的后台管理场景。
最后建订单明细表:复合主键+双外键锁定业务逻辑
① 创建 order_items 表,用 (order_id, product_id) 作联合主键:
CREATETABLE order_items (order_id BIGINT UNSIGNED NOT NULL, product_id INT UNSIGNED NOT NULL, quantity INT NOT NULL, unit_price DECIMAL(10,2) NOT NULL, PRIMARY KEY (order_id, product_id), FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE RESTRICT);
② 联合主键能天然防止同一订单重复添加相同商品,不用额外加唯一索引。
③ product_id 外键设为 ON DELETE RESTRICT,是因为商品下架不应自动删除历史订单明细——业务上要保留原始价格和数量凭证。
④ 执行插入测试:
INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES (1, 101, 2, 99.99);
如果 products 表中没有 id=101 的商品,这条 INSERT 会直接报错,数据库拦住非法数据。

















