SQL 命令的类型

2025年3月17日 | 阅读 12 分钟

SQL 是一种结构化查询语言,用于处理结构化数据。结构化数据通常以关系或表的形式存储。

当我们以表或关系的形式存储数据时,我们需要 SQL 命令。此外,还需要这些命令来检索存储在表中的数据。

Types of SQL Commands

让我们通过实际示例深入探讨 SQL 命令的分类。我们将使用 MySQL 数据库来编写所有查询。

(A) DDL

  • DDL 代表 **数据定义语言**。DDL 命令处理模式,即存储我们数据的表。
  • 所有结构性更改,如在表上进行创建、删除和修改,都可以通过 SQL 中的 DDL 命令完成。
  • DDL 包含的命令是
    1. CREATE
    2. ALTER
    3. DROP
    4. TRUNCATE
    5. 重命名

让我们更详细地了解 DDL 类别中的每个命令。

1. CREATE

在 SQL 中,当我们希望 **在数据库中创建新数据库或新表时**,我们使用 **CREATE** 命令。

创建新数据库的语法

创建表的语法

示例 1

编写一个查询来创建一个名为 school 的数据库。

查询


Types of SQL Commands

在这里,我们执行了一个 CREATE DATABASE 查询,后跟数据库名称 'SCHOOL'。

我们将执行以下命令来验证是否已创建 'SCHOOL' 数据库。


Types of SQL Commands

上述命令的结果验证了 'SCHOOL' 数据库已成功创建。

示例 2

编写一个查询在 'SCHOOL' 数据库中创建一个名为 t_school 的表。

要创建 't_school' 表,我们必须先选择 'SCHOOL' 数据库。

要在 MySQL 中选择数据库,我们将执行以下查询。


Types of SQL Commands

我们执行了 'USE 命令',后跟数据库名称 'SCHOOL'。

现在,在此查询执行后,我们将执行以下查询。

Types of SQL Commands

在这里,我们执行了一个 CREATE TABLE 查询,后跟表名 't_school'。

我们将执行以下命令来验证是否已创建 't_school' 表。


Types of SQL Commands

上述命令结果验证了 't_school' 表已在 'SCHOOL' 数据库中成功创建。

2. ALTER

在 SQL 中,当我们希望修改表结构时,我们将使用 ALTER 命令。使用 **alter 命令,我们可以对表进行结构性更改,例如添加新列、删除现有列、更改现有列的数据类型以及重命名现有列**。

在编写使用 ALTER 命令的查询之前,让我们先看一下语法。

ALTER 命令添加新列的语法

ALTER 命令删除现有列的语法

ALTER 命令重命名现有表列的语法

ALTER 命令更改现有列数据类型的语法

示例 1

编写一个查询,在 t_school 表中添加一个数据类型为 VARCHAR 的新列 Board_of_Education。

在执行向 't_school' 表添加新列的查询之前,我们将执行以下查询以查看表结构。


Types of SQL Commands

Types of SQL Commands

在这里,我们在表 t_school 上执行了 'ALTER 命令',后跟 ADD 关键字、列名 'Board_of_Education'、数据类型 VARCHAR 和大小 20。这仅意味着一个名为 'Board_of_Education' 的新列,数据类型为 VARCHAR,大小为 20,将被添加到现有的 't_school' 表中。

现在,我们将再次对 t_school 表应用 DESC 命令。


Types of SQL Commands

这验证了新列 'Board_of_Education' 已成功添加到 t_school 表中。

示例 2

编写一个查询以从 t_school 表中删除列 Board_of_Education。

在执行从 't_school' 表中删除列的查询之前,我们将执行以下查询以查看表结构。


Types of SQL Commands

Types of SQL Commands

我们已在表 t_school 上执行了 'ALTER 命令',后跟 DROP COLUMN 关键字和列名 'Board_of_Education'。这仅意味着名为 'Board_of_Education' 的现有列将从 't_school' 表中删除。

现在,我们将再次对 t_school 表应用 DESC 命令。


Types of SQL Commands

这验证了 'Board_of_Education' 列已成功从 t_school 表中删除。

示例 3

使用 alter 命令将 t_school 表中的列 Number_of_Students 重命名为 'Count_Students'。

在执行从 't_school' 表重命名列的查询之前,我们将执行以下查询以查看表结构。


Types of SQL Commands

我们在表 t_school 上执行了 'ALTER 命令',后跟 RENAME COLUMN 关键字。这里,Number_of_Students 是旧列名,TO 关键字后面的列名 Count_Students 是新列名。这仅意味着 't_school' 表中现有的 'Number_of_Students' 列将被 'Count_Students' 替换。

现在,我们将再次对 t_school 表应用 DESC 命令。

这验证了 'Number_of_Students' 列已在 t_school 表中成功重命名为 'Count_Students'。

示例 4

编写一个查询以更改 t_school 表中 'Number_of_Students' 的数据类型,并将新数据类型设置为 'VARCHAR',大小为 '20'。

在执行修改 't_school' 表中列数据类型和大小的查询之前,我们将执行以下查询以查看表结构。


Types of SQL Commands

Types of SQL Commands

我们已在表 t_school 上执行了 'ALTER 命令',后跟 MODIFY 关键字。这里,ID 是列名,VARCHAR 是 ID 列的新数据类型,后跟大小 20。

现在,我们将再次对 t_school 表应用 DESC 命令。


Types of SQL Commands

3. DROP

**DROP 命令用于从数据库中删除或删除表记录和表的结构。**

语法

示例

编写一个查询以从 SCHOOL 数据库中删除 t_school 表。

查询


Types of SQL Commands

在这里,我们对表 't_school' 执行了 DROP TABLE 命令。

我们将执行以下命令来验证 't_school' 表是否存在。


Types of SQL Commands

上述命令结果验证了 't_school' 表已成功从 'SCHOOL' 数据库中删除。

4. TRUNCATE

TRUNCATE 命令用于删除表记录,**但表的结构在数据库中保持不变。**

语法

示例

编写一个查询以从 't_school' 表中删除所有记录。

在执行从 't_school' 表中删除记录的查询之前,我们将执行 SELECT 查询以查看表中存在的记录。


IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
1Boys Town Public School10008012[email protected]
2Guru Govind Singh Public School8003515[email protected]
3德里公立学校12003010[email protected]
4Ashoka Universal School11104040[email protected]
5Calibers English Medium School90003150[email protected]
6Cantonment Board High School70504160[email protected]
7Podar International School12000120120[email protected]
8Barnes School18000100100[email protected]
9D.S Kothari Kanya School10000120125[email protected]
10Orchid International School20000200180[email protected]


Types of SQL Commands

在这里,我们在表 t_school 上执行了 'TRUNCATE 命令'。这仅意味着 't_school' 表中的所有记录都将被删除,而表结构在数据库中保持不变。

现在,我们将再次对 t_school 表应用 SELECT 查询。


Types of SQL Commands

上面的结果显示 't_school' 表中的所有记录都已成功删除。

5. RENAME

Rename 命令用于为现有表赋予新名称。

重命名表的语法

示例

编写一个查询将 t_school 表重命名为 tbl_school。

在执行将 't_school' 表重命名为 tbl_school 的查询之前,我们将执行 SHOW TABLES 命令。


Types of SQL Commands

Types of SQL Commands

我们已在表 t_school 上执行了 'RENAME 命令',后跟 'TO' 关键字和新的表名。这仅意味着 't_school' 表现在将被重命名为 tbl_school。

现在,我们将再次执行 SHOW TABLES 命令。


Types of SQL Commands

上面的结果显示列表中不存在 t_school 表。相反,列表中存在 tbl_school,这意味着该表已成功重命名为 tbl_school。

(B) DML

  • DML 代表 *数据操作语言*。使用 SQL 中的 DML 命令,我们可以更改表中的数据。
  • 每当我们希望操作或获取 SQL 表中的数据时,我们就可以在 SQL 中使用 DML 命令。
  • SQL 中的 DML 命令将更改数据,例如 **插入新记录、删除或更新 SQL 表中的现有记录**。我们还可以根据需要检索 SQL 表中的所有数据。
  • DDL 包含的命令是
    1. INSERT
    2. SELECT
    3. UPDATE
    4. DELETE

让我们更详细地了解 DML 类别中的每个命令。

1. INSERT

INSERT 命令 **用于在表中插入记录**。我们可以一次为单个表插入单条或多条记录。

语法

示例

编写一个查询向 t_school 表插入 10 条记录。

查询


Types of SQL Commands

由于我们想在表中插入十条记录,因此我们没有写十次 INSERT 命令,而是写了一个 INSERT 命令来一次插入多条记录。

2. SELECT

**SELECT 命令用于从表中检索记录**。根据我们的要求,我们可以检索表中的所有记录或一些特定记录。每当我们想从表中检索一些特定记录时,我们就必须在 SELECT 查询中指定 WHERE 子句。WHERE 子句将包含一个条件,任何匹配该条件的记录都将作为输出的一部分。

检索所有记录的语法

检索特定记录的语法

示例 1

编写一个查询以检索 t_school 表中所有记录的所有列值。

查询

在这里,我们在 t_school 表上执行了一个带有星号 (*) 的 SELECT 查询。这将检索 t_school 表中所有记录的所有列值。

输出

IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
1Boys Town Public School10008012[email protected]
2Guru Govind Singh Public School8003515[email protected]
3德里公立学校12003010[email protected]
4Ashoka Universal School11104040[email protected]
5Calibers English Medium School90003150[email protected]
6Cantonment Board High School70504160[email protected]
7Podar International School12000120120[email protected]
8Barnes School18000100100[email protected]
9D.S Kothari Kanya School10000120125[email protected]
10Orchid International School20000200180[email protected]

所有记录已从 t_school 表中成功检索。

示例 2

编写一个查询以检索具有超过 11 个教室的学校的所有列值。

查询

我们在 t_school 表上执行了一个带有星号 (*) 的 SELECT 查询,后跟 WHERE 子句条件。由于 WHERE 子句条件,只有 'Number_of_classrooms' 列中值大于 11 的记录才会被检索。

输出

IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
1Boys Town Public School10008012[email protected]
2Guru Govind Singh Public School8003515[email protected]
4Ashoka Universal School11104040[email protected]
5Calibers English Medium School90003150[email protected]
6Cantonment Board High School70504160[email protected]
7Podar International School12000120120[email protected]
8Barnes School18000100100[email protected]
9D.S Kothari Kanya School10000120125[email protected]
10Orchid International School20000200180[email protected]

t_school 表中有九所学校,拥有超过 11 个教室。

3. UPDATE

UPDATE 命令作用于表中的值。每当我们希望更新表中任何记录的值时,我们都会在 SQL 中使用 UPDATE 命令。

语法

示例

编写一个查询以更新 ID 为 9 的记录,并将 Number_of_Teachers 和 Number_of_Classrooms 的更新值分别设置为 125 和 9。

查询


Types of SQL Commands

我们将执行 SELECT 查询以验证 ID 为 9 的记录的教师和教室数量是否已更新。


IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
9D.S Kothari Kanya School10000125120[email protected]

4. DELETE

DELETE 命令用于从表中删除记录。

语法

示例

编写一个查询以从 t_school 表中删除 ID 为 6 的记录。

查询


Types of SQL Commands

我们将执行 SELECT 查询以验证 ID 为 6 的记录是否已被删除。


IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
1Boys Town Public School10008012[email protected]
2Guru Govind Singh Public School8003515[email protected]
3德里公立学校12003010[email protected]
4Ashoka Universal School11104040[email protected]
5Calibers English Medium School90003150[email protected]
7Podar International School12000120120[email protected]
8Barnes School18000100100[email protected]
9D.S Kothari Kanya School10000120125[email protected]
10Orchid International School20000200180[email protected]

结果显示 ID 为 6 的记录已成功从 t_school 表中删除。

(C) DCL

  • DCL 代表 **数据控制语言**。
  • 每当我们想要控制对 SQL 表中数据的访问时,我们都会在 SQL 中使用 DCL 命令。只有授权用户才能访问存储在表中的数据。
  • 每个用户都将拥有一些预定义的权限;相应地,该用户可以访问数据。使用 SQL 中的 DCL 命令,我们可以授予用户对 SQL 数据库和表的权限,也可以撤销授予用户的权限。
  • DCL 包含的命令是

1. GRANT

可以使用 GRANT 命令将访问权限分配给用户,以用于数据库和表。

2. REVOKE

可以使用 REVOKE 命令撤销已分配给用户的所有访问权限。

(D) TCL

  • TCL 代表 **事务控制语言**。TCL 命令通常在事务中使用。
  • 使用 SQL 中的 TCL 命令,我们可以将事务保存到数据库,也可以将事务回滚到事务中的特定点。我们还可以使用 SAVEPOINT 命令保存事务的特定部分。
  • TCL 包含的命令是

1. COMMIT

要保存特定事务中执行的所有操作,我们需要在事务完成后立即执行 commit 命令。

2. ROLLBACK

使用 SQL 中的 rollback 命令,您可以回滚到事务的最后一个保存状态。

3. SAVEPOINT

使用 SAVEPOINT 命令,您可以为事务的特定部分指定名称。

示例


Types of SQL Commands

Types of SQL Commands

Types of SQL Commands

Types of SQL Commands

Types of SQL Commands

到目前为止,我们已经开始了一个事务,向其中插入了记录,提交了事务,并且还创建了一个在插入后创建的 SAVEPOINT ins。


Types of SQL Commands

Types of SQL Commands

我们删除了一条记录并创建了一个名为 del 的 savepoint,但后来我们认为我们需要刚刚删除的记录。所以,我们将回滚到 SAVEPOINT ins。


Types of SQL Commands

IDSchool_NameNumber_Of_StudentsNumber_Of_TeachersNumber_Of_ClassroomsEmailID
1Boys Town Public School10008012[email protected]
2Guru Govind Singh Public School8003515[email protected]
3德里公立学校12003010[email protected]
4Ashoka Universal School11104040[email protected]
5Calibers English Medium School90003150[email protected]

回滚到 ins 后,我们可以看到所有记录都被检索回来了(包括删除的记录)。