数据库系统 第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) 来创建、修改和删除数据库中的表和其他对象。如果你需要更深入的解释或者有其他具体的需求,请随时告诉我!

相关推荐
重生之我是数学王子10 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
xmh-sxh-131411 分钟前
jdk各个版本介绍
java
Ai 编码助手12 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z16 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹23 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE24 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
天天扭码30 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶30 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺35 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
zwjapple41 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式