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

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

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

一、前言

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


二、数据库基础知识回顾

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;

http://www.xdnf.cn/news/8998.html

相关文章:

  • 篇章四 数据结构——顺序表
  • 代码随想录算法训练营第60期第四十八天打卡
  • 010501上传下载_反弹shell-渗透命令-基础入门-网络安全
  • 《棒球百科》国家一级运动员和二级运动员的区别·棒球1号位
  • 【bug排查记录】由Redission配置引发的Satoken血案
  • Nginx 核心功能深度解析:负载均衡、缓存加速与安全防护
  • Structure-Revealing Low-Light Image Enhancement Via Robust Retinex Model论文阅读
  • 如何最简单、通俗地理解Pytorch?神经网络中的“梯度”是怎么自动求出来的?PyTorch的动态计算图是如何实现即时执行的?
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图像分割技术的实现与比较分析
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • DHCPig:使用 scapy 网络库的 DHCP 耗尽脚本!全参数详细教程!Kali Linux教程!
  • 数据治理进阶:数据治理基础概念解释【附全文阅读】
  • sqli-labs第二十六关——Trick with commentspace
  • Python-numpy中常用的统计函数及转换函数
  • 通俗理解线性与非线性、时变与时不变系统,和数值不稳定性机制
  • 内存管理 : 03多级页表和快表
  • MCP 协议结合大模型使用浅讲
  • 【解读—论文】引导性掩码表示学习以捕捉心电图的时空关系
  • 2025/5/25 学习日记 linux进阶命令学习
  • ISO 20000体系:服务请求管理、问题管理、事件管理区别与联系
  • 基于云的内容中台核心优势是什么?
  • Threejs 物体碰撞检测
  • 58.在新建对话的空白页面添加一些引导性话语
  • 《仿盒马》app开发技术分享-- 地址管理页(端云一体)
  • TSC2007触摸驱动实验(一)
  • Java 8到Java 24:核心特性介绍
  • 动态工作空间:目标数据结构为源数据
  • FreeRTOS--消息队列
  • RocketMQ核心特性与最佳实践