当前位置: 首页 > news >正文

数据库入门教程:以商品订单系统为例

数据库入门教程:以商品订单系统为例

一、前言

数据库是现代软件开发中不可或缺的基础,掌握数据库的基本概念和操作,是每个开发者的必经之路。本文将以“商品-品牌-客户-订单-订单项”为例,带你快速入门数据库的核心知识和基本操作。


二、数据库基础知识回顾

1. 主键(Primary Key, PK)

主键是表中用来唯一标识一条记录的一列或多列的组合。主键分为业务主键(如身份证号、手机号等有实际业务意义的字段)和代理主键(如自增ID)。

2. 外键(Foreign Key, FK)

外键用于连接两张表,是引用另一张表的主键或唯一键,用于保证数据的完整性和关联性。

3. 关系范式

  • 1NF(第一范式):每一列的值都是不可再分的原子值。
  • 2NF(第二范式):表中的每个非主属性都完全依赖于主键。
  • 3NF(第三范式):非主属性之间不能有传递依赖。

范式的意义:消除冗余、保证数据完整性和一致性。


三、SQL 语言分类

  • DDL(数据定义语言):用于定义和管理数据库对象(如表、视图、索引等)。
    • CREATE:创建
    • ALTER:修改
    • DROP:删除
    • TRUNCATE:清空
    • GRANT:授权
  • DML(数据操作语言):用于对数据进行增删改查(CRUD)。
    • INSERT:插入
    • SELECT:查询
    • UPDATE:更新
    • DELETE:删除
  • TCL(事务控制语言):用于管理事务。

四、常用数据类型

  • 数值类型bittinyintsmallintintbigintdecimaldouble
  • 文本类型CHARVARCHARTEXTBLOBENUMSET
  • 日期时间类型DATETIMEDATETIMETIMESTAMPYEAR
  • JSON类型:用于存储结构化数据(如数组、对象)

五、实战:商品订单系统表设计

1. 创建数据库

CREATE DATABASE shopdb;
USE shopdb;

2. 创建表结构

(1)品牌表
CREATE TABLE brand (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL
);
(2)商品表
CREATE TABLE product (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(64) NOT NULL,price DECIMAL(10,2) NOT NULL,brand_id INT,FOREIGN KEY (brand_id) REFERENCES brand(id)
);
(3)客户表
CREATE TABLE customer (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL,tel CHAR(11),birthday DATE
);
(4)订单表
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,customer_id INT,order_date DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (customer_id) REFERENCES customer(id)
);
(5)订单项表
CREATE TABLE order_item (id INT PRIMARY KEY AUTO_INCREMENT,order_id INT,product_id INT,quantity INT NOT NULL,FOREIGN KEY (order_id) REFERENCES orders(id),FOREIGN KEY (product_id) REFERENCES product(id)
);

3. 插入数据示例

-- 插入品牌
INSERT INTO brand(name) VALUES ('华为'), ('苹果');-- 插入商品
INSERT INTO product(name, price, brand_id) VALUES ('Mate60', 4999.00, 1), ('iPhone15', 6999.00, 2);-- 插入客户
INSERT INTO customer(name, tel, birthday) VALUES ('张三', '13800000001', '1990-01-01'), ('李四', '13800000002', '1992-02-02');-- 插入订单
INSERT INTO orders(customer_id) VALUES (1), (2);-- 插入订单项
INSERT INTO order_item(order_id, product_id, quantity) VALUES (1, 1, 2), (1, 2, 1), (2, 2, 3);

4. 查询数据示例

-- 查询所有订单及其客户信息
SELECT o.id AS 订单号, c.name AS 客户名, o.order_date
FROM orders o
JOIN customer c ON o.customer_id = c.id;-- 查询某订单的商品明细
SELECT oi.order_id, p.name AS 商品名, oi.quantity, p.price
FROM order_item oi
JOIN product p ON oi.product_id = p.id
WHERE oi.order_id = 1;

相关文章:

  • LeetCode百题刷004(哈希表优化两数和问题)
  • NGINX 用户标识模块 (ngx_http_userid_module) 完整配置与最佳实践指南
  • 图论:floyed算法
  • java枚举和mybaits-plus结合实现映射输出和存储
  • 图论 判断是否有环
  • sqli-labs第二十八关——Trick with ‘union select‘
  • STM32G0xx基于串口(UART)Ymodem协议实现OTA升级包括Bootloader、上位机、应用程序
  • 语音识别——文本转语音
  • leetcode617.合并二叉树:递归思想下的树结构融合艺术
  • [yolov11改进系列]基于yolov11引入特征增强注意力机制ADNet的python源码+训练源码
  • 深度学习入门6:pytorch卷积神经网络CNN实现手写数字识别准确率99%
  • 从万有引力到深度学习,认识模型思维
  • 地理卷积神经网络加权回归模型的详细实现方案
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • java性能分析工具(perfino和Jprofiler简单对比)
  • LSTM三个门控机制详解
  • 深度学习在图像识别中的创新应用及其挑战
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)
  • mysql主从复制搭建
  • 第4章-操作系统知识
  • 平面设计公司属于什么行业类别/互联网广告优化
  • 做是么网站/怎么开个人网站
  • 开发公司与物业公司交接清单/在线观看的seo综合查询
  • 做网站 广告费 步骤/江门seo网站推广
  • 长沙百姓网招聘信息/seowhy教研室
  • 南沙网站开发/广告点击一次多少钱