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 | |
---|---|---|---|
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 | |
---|---|---|---|
1001 | Alice | (123) 456-7890 | alice@example.com |
4. 向 Readers
表中添加一个新列 Address
- 添加新列后的
Readers
表
ReaderID | Name | Phone | 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 TABLE
或 DROP TABLE
来移除该列或整个表。
如果只需要删除该列,我们可以这样做:
SQL 代码示例:
sql
ALTER TABLE Employees
DROP COLUMN Email;
如果整个表不再需要,我们可以直接删除它:
SQL 代码示例:
sql
DROP TABLE Employees;
通过这些概念和查询,我们可以看到如何利用数据定义语言 (DDL) 来创建、修改和删除数据库中的表和其他对象。如果你需要更深入的解释或者有其他具体的需求,请随时告诉我!