数据库系统 第5节 数据定义语言

3. 数据定义语言 (DDL)

数据定义语言 (DDL) 是一组用于定义数据库结构的SQL命令。DDL主要用于创建、修改和删除数据库对象,如表、视图、索引等。DDL主要包括以下几种操作:

CREATE

定义 : CREATE 语句用于创建新的数据库对象,如表、视图、存储过程等。

语法:

sql 复制代码
CREATE [TABLE | VIEW | INDEX | DATABASE | ...] object_name (definition [, definition] ...);
  • [TABLE | VIEW | INDEX | DATABASE | ...]: 指定要创建的对象类型。
  • object_name: 要创建的对象的名称。
  • (definition [, definition] ... ): 对象的定义,包括列名、数据类型、约束等。

案例:

  • 创建表
sql 复制代码
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Address VARCHAR(200),
    Phone VARCHAR(20)
);
  • 创建视图
sql 复制代码
CREATE VIEW CustomerSummary AS
SELECT CustomerID, Name, COUNT(*) AS NumberOfOrders
FROM Orders
GROUP BY CustomerID, Name;
ALTER

定义 : ALTER 语句用于修改已有的数据库对象,如添加或删除列、更改列的数据类型、添加或删除约束等。

语法:

sql 复制代码
ALTER [TABLE | VIEW | INDEX | DATABASE | ...] object_name [alteration [, alteration] ...];
  • [TABLE | VIEW | INDEX | DATABASE | ...]: 指定要修改的对象类型。
  • object_name: 要修改的对象的名称。
  • [alteration [, alteration] ...]: 修改操作,如添加列、删除列等。

案例:

  • 修改表
sql 复制代码
ALTER TABLE Customers
ADD Email VARCHAR(100);
  • 修改视图
sql 复制代码
ALTER VIEW CustomerSummary AS
SELECT CustomerID, Name, COUNT(*) AS NumberOfOrders, MAX(OrderDate) AS LastOrderDate
FROM Orders
GROUP BY CustomerID, Name;
DROP

定义 : DROP 语句用于删除数据库对象,如表、视图、存储过程等。

语法:

sql 复制代码
DROP [TABLE | VIEW | INDEX | DATABASE | ...] object_name [, object_name] ...;
  • [TABLE | VIEW | INDEX | DATABASE | ...]: 指定要删除的对象类型。
  • object_name: 要删除的对象的名称。

案例:

  • 删除表
sql 复制代码
DROP TABLE Customers;
  • 删除视图
sql 复制代码
DROP VIEW CustomerSummary;

示例结果

CREATE 示例
  • 创建表
sql 复制代码
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Address VARCHAR(200),
    Phone VARCHAR(20)
);
ALTER 示例
  • 修改表
sql 复制代码
ALTER TABLE Customers
ADD Email VARCHAR(100);
DROP 示例
  • 删除表
sql 复制代码
DROP TABLE Customers;

总结

通过这些基本的DDL操作,你可以有效地管理和定义数据库中的结构。CREATE 语句用于创建新的数据库对象,ALTER 语句用于修改现有的数据库对象,而 DROP 语句用于删除不再需要的数据库对象。这些操作对于数据库设计和维护至关重要。

这次我们将创建一个简单的在线图书馆管理系统。

案例:在线图书馆管理系统

实体和属性
  • 书籍 (Books)

    • 书籍ID (BookID)
    • 标题 (Title)
    • 作者 (Author)
    • 出版社 (Publisher)
    • 出版日期 (PublicationDate)
  • 借阅记录 (Loans)

    • 借阅ID (LoanID)
    • 书籍ID (BookID)
    • 读者ID (ReaderID)
    • 借阅日期 (LoanDate)
    • 返还日期 (ReturnDate)
  • 读者 (Readers)

    • 读者ID (ReaderID)
    • 姓名 (Name)
    • 电话 (Phone)
    • 邮箱 (Email)

关系表 (Tables)

书籍表 (Books)
BookID Title Author Publisher PublicationDate
1 The Catcher in the Rye J.D. Salinger Little, Brown and Co. 1951-07-16
2 To Kill a Mockingbird Harper Lee J.B. Lippincott & Co. 1960-07-11
... ... ... ... ...
借阅记录表 (Loans)
LoanID BookID ReaderID LoanDate ReturnDate
1001 1 1001 2024-08-01 2024-08-15
1002 2 1002 2024-08-05 2024-08-20
... ... ... ... ...
读者表 (Readers)
ReaderID Name Phone Email
1001 Alice (123) 456-7890 alice@example.com
1002 Bob (987) 654-3210 bob@example.com
... ... ... ...

数据定义语言 (DDL)

CREATE
  • 创建 Books
sql 复制代码
CREATE TABLE Books (
    BookID INT PRIMARY KEY,
    Title VARCHAR(100) NOT NULL,
    Author VARCHAR(100) NOT NULL,
    Publisher VARCHAR(100) NOT NULL,
    PublicationDate DATE NOT NULL
);
  • 创建 Loans
sql 复制代码
CREATE TABLE Loans (
    LoanID INT PRIMARY KEY,
    BookID INT NOT NULL,
    ReaderID INT NOT NULL,
    LoanDate DATE NOT NULL,
    ReturnDate DATE,
    FOREIGN KEY (BookID) REFERENCES Books(BookID),
    FOREIGN KEY (ReaderID) REFERENCES Readers(ReaderID)
);
  • 创建 Readers
sql 复制代码
CREATE TABLE Readers (
    ReaderID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Phone VARCHAR(20) NOT NULL,
    Email VARCHAR(100) NOT NULL
);
ALTER
  • Readers 表中添加一个新列 Address
sql 复制代码
ALTER TABLE Readers
ADD Address VARCHAR(200);
DROP
  • 删除 Loans
sql 复制代码
DROP TABLE Loans;

示例结果

CREATE 示例
  • 创建 Books
sql 复制代码
CREATE TABLE Books (
    BookID INT PRIMARY KEY,
    Title VARCHAR(100) NOT NULL,
    Author VARCHAR(100) NOT NULL,
    Publisher VARCHAR(100) NOT NULL,
    PublicationDate DATE NOT NULL
);
ALTER 示例
  • Readers 表中添加一个新列 Address
sql 复制代码
ALTER TABLE Readers
ADD Address VARCHAR(200);
DROP 示例
  • 删除 Loans
sql 复制代码
DROP TABLE Loans;

SQL 查询示例

1. 创建 Books
sql 复制代码
CREATE TABLE Books (
    BookID INT PRIMARY KEY,
    Title VARCHAR(100) NOT NULL,
    Author VARCHAR(100) NOT NULL,
    Publisher VARCHAR(100) NOT NULL,
    PublicationDate DATE NOT NULL
);
2. 创建 Loans
sql 复制代码
CREATE TABLE Loans (
    LoanID INT PRIMARY KEY,
    BookID INT NOT NULL,
    ReaderID INT NOT NULL,
    LoanDate DATE NOT NULL,
    ReturnDate DATE,
    FOREIGN KEY (BookID) REFERENCES Books(BookID),
    FOREIGN KEY (ReaderID) REFERENCES Readers(ReaderID)
);
3. 创建 Readers
sql 复制代码
CREATE TABLE Readers (
    ReaderID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Phone VARCHAR(20) NOT NULL,
    Email VARCHAR(100) NOT NULL
);
4. Readers 表中添加一个新列 Address
sql 复制代码
ALTER TABLE Readers
ADD Address VARCHAR(200);
5. 删除 Loans
sql 复制代码
DROP TABLE Loans;

示例结果

1. 创建 Books
  • 创建表 Books
BookID Title Author Publisher PublicationDate
1 The Catcher in the Rye J.D. Salinger Little, Brown and Co. 1951-07-16
2 To Kill a Mockingbird Harper Lee J.B. Lippincott & Co. 1960-07-11
2. 创建 Loans
  • 创建表 Loans
LoanID BookID ReaderID LoanDate ReturnDate
1001 1 1001 2024-08-01 2024-08-15
3. 创建 Readers
  • 创建表 Readers
ReaderID Name Phone Email
1001 Alice (123) 456-7890 alice@example.com
4. Readers 表中添加一个新列 Address
  • 添加新列后的 Readers
ReaderID Name Phone Email Address
1001 Alice (123) 456-7890 alice@example.com
5. 删除 Loans
  • 删除表 Loans 后的结果
LoanID BookID ReaderID LoanDate ReturnDate

让我们通过一个具体的案例来更好地理解如何使用数据定义语言(DDL)中的 CREATE, ALTER, 和 DROP 语句。

假设我们正在为一家名为 "Acme Corp" 的公司开发一个员工管理系统,并且需要管理有关员工的信息。

步骤 1: 创建表

首先,我们需要创建一个表来存储员工的基本信息。我们可以使用 CREATE TABLE 语句来完成这个任务。

SQL 代码示例:
sql 复制代码
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Department VARCHAR(50),
    HireDate DATE
);

这段 SQL 代码创建了一个名为 Employees 的表,其中包含以下列:

  • EmployeeID: 员工的唯一标识符,作为主键。
  • FirstName: 员工的名字。
  • LastName: 员工的姓氏。
  • Department: 员工所在的部门。
  • HireDate: 员工的入职日期。

步骤 2: 修改表结构

假设在创建表之后,我们意识到还需要记录每个员工的电子邮件地址。我们可以使用 ALTER TABLE 语句来添加这一列。

SQL 代码示例:
sql 复制代码
ALTER TABLE Employees
ADD Email VARCHAR(100);

这条命令会在 Employees 表中增加一个新列 Email,用来存储员工的电子邮件地址。

步骤 3: 删除表或表中的列

现在,假设几个月后公司的政策发生了变化,决定不再收集员工的电子邮件地址以保护隐私。这时我们可以使用 ALTER TABLEDROP TABLE 来移除该列或整个表。

如果只需要删除该列,我们可以这样做:

SQL 代码示例:
sql 复制代码
ALTER TABLE Employees
DROP COLUMN Email;

如果整个表不再需要,我们可以直接删除它:

SQL 代码示例:
sql 复制代码
DROP TABLE Employees;

通过这些概念和查询,我们可以看到如何利用数据定义语言 (DDL) 来创建、修改和删除数据库中的表和其他对象。如果你需要更深入的解释或者有其他具体的需求,请随时告诉我!

相关推荐
abcy0712131 分钟前
【无标题】
数据库·sqlite
右耳朵猫AI3 分钟前
PHP技术周刊 2026年第20周
开发语言·php
code2roc4 分钟前
SpringBoot整合Milvus向量数据库
数据库·spring boot·milvus·向量化
日月云棠4 分钟前
12 Enum —— 枚举类型的底层实现
java·后端
AugustRed5 分钟前
Flyway 数据库版本迁移 零基础完整学习文档
数据库·学习
轻刀快马9 分钟前
从繁琐到极简,从幻象到本质:Spring AOP 架构演进与实战避坑指南
java·spring·架构
我的xiaodoujiao10 分钟前
API 接口自动化测试详细图文教程学习系列23--结合Pytest框架使用4-前后置处理
python·学习·测试工具·pytest
weixin_BYSJ198710 分钟前
springboot旅游管理系统04470(附源码+开发文档+部署教程)
java·spring boot·python·算法·django·flask·旅游
8Qi812 分钟前
LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
java·算法·leetcode·双指针·滑动窗口
Yvonne爱编码13 分钟前
数据库---Day9 视图(附完整数据库脚本+练习题)
数据库·mysql·oracle