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

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

一、前言

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


二、数据库基础知识回顾

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.pswp.cn/pingmian/82344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeoServer样式设置:使用本地图标及分层/分视野显示

GeoServer样式设置:使用本地图标及分层/分视野显示 1、本地图标生效设置2、GeoServer添加不同视野的图标点样式1)服务预览效果2)本地图标引用3)不同视野显示不同图标4)标注注记显示空间的点数据,使用图标来表示是非常常见的业务需求,而且由于在不同比例尺下,可能需要设…

DL00347-基于人工智能YOLOv11的安检X光危险品刀具检测含数据集

🚨 AI技术革新,提升安检效率与安全性!YOLOv11助力X光危险品刀具检测! 💡 在安全领域,效率与精准度的要求从未如此迫切。作为科研人员,是否一直在寻找一款可以提升安检准确率、减少人工干预、提…

测试计划与用例撰写指南

测试计划与用例撰写指南 一、测试计划:项目测试的 “导航地图”1.1 测试计划的核心目标 1.2 测试计划的关键要素 1.2.1 项目概述 1.2.2 测试策略 1.2.3 资源与进度 1.2.4 风险评估与应对 二、测试用例:测试执行的 “行动指南”2.1 测试用例的设计原则 2…

微服务的应用案例

从“菜市场”到“智慧超市”:一场微服务的变革之旅 曾经,我们的系统像一个熙熙攘攘的传统菜市场。所有功能模块(摊贩)都挤在一个巨大的单体应用中。用户请求(买菜的顾客)一多,整个市场就拥堵不堪…

Java设计模式之观察者模式:从基础到高级的全面解析

文章目录 一、观察者模式基础概念1.1 什么是观察者模式?1.2 观察者模式的四大角色1.3 观察者模式类图二、观察者模式实现步骤2.1 基础实现步骤2.2 详细代码实现第一步:定义主题接口第二步:定义观察者接口第三步:创建具体主题第四步:创建具体观察者第五步:客户端使用三、观…

GATT 服务的核心函数bt_gatt_discover的介绍

目录 概述 1 GATT 基本概念 1.1 GATT 的介绍 1.2 GATT 的角色 1.3 核心组件 1.4 客户端操作 2 bt_gatt_discover函数的功能和应用 2.1 函数介绍 2.1 发现类型(Discover Type) 3 典型使用流程 3.1 服务发现示例 3.2 级联发现模式 3.3 按UUID过…

【更新至2023年】1985-2023年全国及各省就业人数数据(无缺失)

1985-2023年全国及各省就业人数数据(无缺失) 1、时间:1985-2023年 2、来源:Z国统计年鉴、各省年鉴、新中国60年 3、指标:就业人数 4、范围:全国及31省 5、缺失情况:无缺失 6、指标解释&am…

0基础学习Linux之揭开朦胧一面:环境基础开发工具

目录 Linux下安装软件的方案: 对于操作系统的理解: 操作系统的生态问题: 什么是好的操作系统(os): 重新理解centos VS ubnutu VS kail: 关于yum: 用 yum 安装软件(安装和卸载软件一定要有r…

YOLO 算法详解:实时目标检测的里程碑

在计算机视觉领域,目标检测一直是一个关键且热门的研究方向,而 YOLO(You Only Look Once)算法凭借其出色的实时性和较高的检测精度,成为了目标检测算法中的明星选手。本文将深入探讨 YOLO 算法的原理、发展历程、技术优…

leetcode98.验证二叉搜索树:递归法中序遍历的递增性验证之道

一、题目深度解析与BST核心性质 题目描述 验证二叉搜索树(BST)是算法中的经典问题,要求判断给定的二叉树是否满足BST的定义: 左子树中所有节点的值严格小于根节点的值右子树中所有节点的值严格大于根节点的值左右子树本身也必须…

MathQ-Verify:数学问题验证的五步流水线,为大模型推理筑牢数据基石

MathQ-Verify:数学问题验证的五步流水线,为大模型推理筑牢数据基石 大语言模型在数学推理领域进展显著,但现有研究多聚焦于生成正确推理路径和答案,却忽视了数学问题本身的有效性。MathQ-Verify,通过五阶段流水线严格…

八股战神-JVM知识速查

1.JVM组成 JVM由那些部分组成,运行流程是什么? JVM是Java程序的运行环境 组成部分: 类加载器:加载字节码文件到内存 运行时数据区:包括方法区,堆,栈,程序计数器,本地…

Maven:在原了解基础上对pom.xml文件进行详细解读

一、pom.xml文件 就像项目管理软件 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是 pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等…

Spring Cloud项目登录认证从JWT切换到Redis + UUID Token方案

背景介绍 在传统的Spring Boot项目中,用户登录认证常见的方案是使用JWT(JSON Web Token)来实现无状态的身份验证。JWT凭借自包含用户信息、方便前后端分离、性能较好等优势被广泛采用。 然而,在实际项目中,JWT也有一…

MongoDB 快速整合 SpringBoot 示例

1.添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

Flyweight(享元)设计模式 软考 享元 和 代理属于结构型设计模式

1.目的&#xff1a;运用共享技术有效地支持大量细粒度的对象 Flyweight&#xff08;享元&#xff09;设计模式 是一种结构型设计模式&#xff0c;它的核心目的是通过共享对象来减少内存消耗&#xff0c;特别是在需要大量相似对象的场景中。Flyweight 模式通过将对象的共享细节与…

002大模型-提示词工程,少样本提示,角色扮演,思维链

一、提示词工程 二、少样本提示 三、角色扮演 四、思维链

华为OD机试真题——传递悄悄话(二叉树最长路径问题)(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

「读书报告」Spark实时大数据分析

这本书是清华大学出版社2018年出版的&#xff0c;我是2020年读的&#xff0c;说真的的&#xff0c;不怎么喜欢这本书&#xff0c;所以作者我都不想提。有的人可能会奇怪&#xff0c;ailx10&#xff0c;你一个搞网络安全的&#xff0c;怎么会去读大数据相关的书&#xff0c;哎&a…

2025 河北ICPC( D. 金泰园(二分)-- C.年少的誓约(公式转化))

文章目录 2025 河北ICPCD. 金泰园&#xff08;二分&#xff09;C.年少的誓约(公式转化)总结 2025 河北ICPC 题目链接&#xff1a; Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces sdccpc20250522 - Virtual Judge 赛时&#xff1a;5道 D. 金泰…