第七部分:第一节 - 数据库基础与 MySQL 入门:仓库的结构与管理语言

发布于:2025-05-23 ⋅ 阅读:(33) ⋅ 点赞:(0)

之前我们使用的内存数组存储数据,一旦服务器重启,所有数据都会丢失。数据库就是用来解决这个问题的:它能将数据持久化存储到硬盘上,即使服务器关机,数据也不会丢失。

关系型数据库 vs NoSQL 数据库:

数据库有很多种类,主要可以分为两大类:

  1. 关系型数据库 (Relational Database): 数据以表格 (Table) 的形式组织,表格之间通过关系(通常是外键)连接。数据结构严谨,适合存储结构化数据,保证数据的一致性和完整性。想象一下,仓库里的每种原材料(如蔬菜、肉类)都存放在各自的标准货架(表格)上,并且可以通过清单(关系)查到每种菜品需要哪些原材料。MySQL, PostgreSQL, SQL Server, Oracle 都是典型的关系型数据库。
  2. NoSQL 数据库 (Not Only SQL): 数据存储形式多样,比如键值对、文档、列族、图等。数据结构灵活,适合存储非结构化或半结构化数据,易于水平扩展。想象一下,一些不常用的或格式多样的物品,可能没有固定的货架,而是灵活存放。MongoDB, Redis, Cassandra 都是典型的 NoSQL 数据库。

本次教程我们将聚焦于关系型数据库,并以最流行的 MySQL 为例进行学习。

MySQL 是什么?

MySQL 是一个开源的、免费的(也有商业版本)关系型数据库管理系统 (RDBMS)。它是 Web 应用开发中最常用的数据库之一。

数据库基本概念:

在 MySQL 中,数据被组织在数据库中,一个数据库可以包含多个表 (Table)

  • 表 (Table): 类似于电子表格,由行和列组成。例如,一个 users 表用来存放所有用户的信息,一个 products 表用来存放所有产品的信息。
  • 行 (Row) / 记录 (Record): 表中的一行代表一个独立的数据项,比如 users 表中的一行就是一个用户的完整信息。
  • 列 (Column) / 字段 (Field): 表中的一列代表数据项的某个属性,比如 users 表中的 name 列、age 列。每一列都有特定的数据类型(如整数、字符串、日期等)。
  • 主键 (Primary Key): 表中的一列或一组列,其值能唯一标识表中的每一行。主键值不能重复,也不能为 NULL。通常用一个自增的整数作为主键,如用户 ID。想象一下,仓库里的每个箱子都有一个唯一的编号。
  • 外键 (Foreign Key): 表中的一列或一组列,它引用了另一个表中的主键。外键建立了表与表之间的关系。例如,在 orders 表中有一个 user_id 列,它是 users 表中 id 列的外键,表示这个订单是哪个用户下的。这就像在菜品清单上,记录了这道菜需要哪些原材料,并通过原材料的编号(外键)指向原材料货架上的具体物品。

SQL (Structured Query Language):

SQL 是用于管理关系型数据库的标准语言。我们可以使用 SQL 语句来创建数据库、创建表、插入数据、查询数据、更新数据、删除数据等。这就像管理仓库时使用的指令语言。

核心的 SQL 操作(对应 CRUD):

  • SELECT: 从表中查询 (Read) 数据。
    SELECT * FROM users; -- 查询 users 表中的所有列所有行
    SELECT name, age FROM users WHERE age > 25; -- 查询年龄大于 25 的用户的姓名和年龄
    
  • INSERT: 向表中插入 (Create) 新数据。
    INSERT INTO users (name, age) VALUES ('Alice', 30); -- 向 users 表插入一行数据
    
  • UPDATE: 更新 (Update) 表中的现有数据。
    UPDATE users SET age = 31 WHERE name = 'Alice'; -- 将名字为 Alice 的用户的年龄更新为 31
    
  • DELETE: 从表中删除 (Delete) 数据。
    DELETE FROM users WHERE age < 20; -- 删除年龄小于 20 的用户
    
  • CREATE TABLE: 创建新表。
    CREATE TABLE products (
        id INT AUTO_INCREMENT PRIMARY KEY, -- 定义 id 列作为主键,自动递增
        name VARCHAR(255) NOT NULL,      -- 定义 name 列,字符串类型,不能为空
        price DECIMAL(10, 2),            -- 定义 price 列,十进制数字类型
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 定义 created_at 列,时间戳类型,默认当前时间
    );
    

安装 MySQL:

请访问 MySQL 官方网站 (https://www.mysql.com/) 下载并安装 MySQL Server。安装过程中会让你设置 root 用户的密码。安装完成后,你可能需要安装一个 GUI 工具(如 MySQL Workbench, DBeaver)或使用命令行客户端来连接和管理数据库。

小例子:连接 MySQL 并执行基本 SQL

打开你的 MySQL 命令行客户端或 GUI 工具。

  1. 连接到数据库服务器。
  2. 创建新的数据库:
    CREATE DATABASE my_webapp_db;
    
  3. 选择要使用的数据库:
    USE my_webapp_db;
    
  4. 创建 users 表:
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE, -- 用户名不能为空且唯一
        email VARCHAR(255) UNIQUE,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
  5. 插入数据:
    INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
    INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');
    
  6. 查询数据:
    SELECT * FROM users; -- 应该能看到 alice 和 bob 的记录
    SELECT username FROM users WHERE id = 1; -- 查询 id 为 1 的用户的用户名
    
  7. 更新数据:
    UPDATE users SET email = 'bob.updated@example.com' WHERE username = 'bob';
    
  8. 删除数据:
    DELETE FROM users WHERE username = 'alice';
    
  9. 再次查询,确认更新和删除生效:
    SELECT * FROM users; -- 应该只能看到 bob 的更新后的记录
    

小结: 数据库是实现数据持久化的关键。关系型数据库(如 MySQL)以表格形式组织数据,并通过主键和外键建立关系。SQL 是操作关系型数据库的标准语言,掌握 SELECT, INSERT, UPDATE, DELETE 是数据库操作的基础。

练习:

  1. 安装 MySQL Server 和一个客户端工具。
  2. 创建一个名为 my_bookstore_db 的数据库。
  3. my_bookstore_db 数据库中创建一个名为 books 的表,包含以下列:
    • id: INT, 主键,自动递增
    • title: VARCHAR(255), 不能为空
    • author: VARCHAR(255), 不能为空
    • publication_year: INT
    • isbn: VARCHAR(13), 唯一
    • created_at: TIMESTAMP, 默认当前时间
  4. 使用 INSERT 语句向 books 表中插入至少 3 本书籍记录。
  5. 使用 SELECT 语句查询所有书籍的标题和作者。
  6. 使用 UPDATE 语句修改其中一本图书的出版年份。
  7. 使用 DELETE 语句删除其中一本图书记录。
  8. 再次使用 SELECT 语句确认修改和删除生效。

网站公告

今日签到

点亮在社区的每一天
去签到