Bootstrap

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

3. 数据定义语言 (DDL)

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

CREATE

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

语法:

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

案例:

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

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

语法:

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

案例:

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

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

语法:

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

案例:

  • 删除表
DROP TABLE Customers;
  • 删除视图
DROP VIEW CustomerSummary;

示例结果

CREATE 示例
  • 创建表
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Address VARCHAR(200),
    Phone VARCHAR(20)
);
ALTER 示例
  • 修改表
ALTER TABLE Customers
ADD Email VARCHAR(100);
DROP 示例
  • 删除表
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)
BookIDTitleAuthorPublisherPublicationDate
1The Catcher in the RyeJ.D. SalingerLittle, Brown and Co.1951-07-16
2To Kill a MockingbirdHarper LeeJ.B. Lippincott & Co.1960-07-11
借阅记录表 (Loans)
LoanIDBookIDReaderIDLoanDateReturnDate
1001110012024-08-012024-08-15
1002210022024-08-052024-08-20
读者表 (Readers)
ReaderIDNamePhoneEmail
1001Alice(123) 456-7890[email protected]
1002Bob(987) 654-3210[email protected]

数据定义语言 (DDL)

CREATE
  • 创建 Books
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
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
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
ALTER TABLE Readers
ADD Address VARCHAR(200);
DROP
  • 删除 Loans
DROP TABLE Loans;

示例结果

CREATE 示例
  • 创建 Books
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
ALTER TABLE Readers
ADD Address VARCHAR(200);
DROP 示例
  • 删除 Loans
DROP TABLE Loans;

SQL 查询示例

1. 创建 Books
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
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
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
ALTER TABLE Readers
ADD Address VARCHAR(200);
5. 删除 Loans
DROP TABLE Loans;

示例结果

1. 创建 Books
  • 创建表 Books
BookIDTitleAuthorPublisherPublicationDate
1The Catcher in the RyeJ.D. SalingerLittle, Brown and Co.1951-07-16
2To Kill a MockingbirdHarper LeeJ.B. Lippincott & Co.1960-07-11
2. 创建 Loans
  • 创建表 Loans
LoanIDBookIDReaderIDLoanDateReturnDate
1001110012024-08-012024-08-15
3. 创建 Readers
  • 创建表 Readers
ReaderIDNamePhoneEmail
1001Alice(123) 456-7890[email protected]
4. Readers 表中添加一个新列 Address
  • 添加新列后的 Readers
ReaderIDNamePhoneEmailAddress
1001Alice(123) 456-7890[email protected]
5. 删除 Loans
  • 删除表 Loans 后的结果
LoanIDBookIDReaderIDLoanDateReturnDate

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

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

步骤 1: 创建表

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

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 代码示例:
ALTER TABLE Employees
ADD Email VARCHAR(100);

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

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

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

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

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

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

SQL 代码示例:
DROP TABLE Employees;

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

;