面试题答案
一键面试订单表(orders)
字段名 | 数据类型 | 说明 | 外键约束 |
---|---|---|---|
order_id | int(11) | 订单ID,主键,自增 | - |
user_id | int(11) | 下单用户ID,关联 users 表的 user_id | FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE |
product_id | int(11) | 购买商品ID,关联 products 表的 product_id | FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE ON UPDATE CASCADE |
order_date | datetime | 下单日期 | - |
order_amount | decimal(10, 2) | 订单金额 | - |
用户表(users)
字段名 | 数据类型 | 说明 |
---|---|---|
user_id | int(11) | 用户ID,主键,自增 |
username | varchar(50) | 用户名 |
varchar(100) | 用户邮箱 | |
phone | varchar(20) | 用户电话 |
address | varchar(200) | 用户地址 |
商品表(products)
字段名 | 数据类型 | 说明 |
---|---|---|
product_id | int(11) | 商品ID,主键,自增 |
product_name | varchar(100) | 商品名称 |
price | decimal(10, 2) | 商品价格 |
description | text | 商品描述 |
删除用户和商品记录时可能遇到的问题及解决方案
- 删除用户记录:
- 问题:由于订单表通过外键关联了用户表,如果直接删除用户记录,会违反外键约束,导致删除失败。
- 解决方案:
- 级联删除(CASCADE):在创建外键约束时设置
ON DELETE CASCADE
,如上述订单表创建语句。这样当删除用户记录时,与之关联的订单记录也会被自动删除。 - 先删除关联订单:在删除用户之前,先手动删除订单表中该用户的所有订单记录,然后再删除用户记录。
- 级联删除(CASCADE):在创建外键约束时设置
- 删除商品记录:
- 问题:同样,订单表通过外键关联了商品表,直接删除商品记录会违反外键约束。
- 解决方案:
- 级联删除(CASCADE):在创建外键约束时设置
ON DELETE CASCADE
,当删除商品记录时,与之关联的订单记录也会被自动删除。 - 先处理关联订单:可以先更新订单表中相关订单,将商品ID设置为一个特殊值(如0表示已删除商品),或者将订单标记为无效等处理方式,然后再删除商品记录。
- 级联删除(CASCADE):在创建外键约束时设置