SQL 命令 (DDL, DML, DCL, TCL, DQL)

2025年4月17日 | 阅读 11 分钟
  • SQL 命令是指令。它用于与数据库进行通信。它也用于执行特定的任务、功能和数据查询。
  • SQL 可以执行各种任务,例如创建表、向表中添加数据、删除表、修改表、为用户设置权限。

SQL 命令的类型

SQL 命令有四种类型:DDL、DML、DCL、TCL。

DBMS SQL command

1. 数据定义语言 (DDL)

  • DDL 更改表的结构,例如创建表、删除表、修改表等。
  • 所有 DDL 命令都是自动提交的,这意味着它们会永久保存数据库中的所有更改。

以下是一些属于 DDL 的命令:

DBMS SQL command

a. CREATE 用于在数据库中创建新表。

语法

<

在上述语句中,TABLE_NAME 是表的名称,COLUMN_NAMES 是列的名称,DATATYPES 用于定义数据类型。

示例

b. DROP: 用于删除表中的结构和存储的记录。

语法:永久从内存中删除表

CASCADE CONSTRAINT 是一个可选参数,用于引用正在被删除的表的表。如果未指定 CASCADE CONSTRAINT 并尝试删除有子表记录的表,则会发生错误。因此,通过使用 CASCADE CONSTRAINT,可以删除所有子表的外键。

示例

c. ALTER: 用于修改数据库的结构。此更改可以是修改现有属性的特征,也可以是添加新属性。

以下是可以使用 ALTER 命令进行的修改列表:

  • 使用 ALTER 命令,我们可以向现有表中添加或删除一个或多个列。
  • 通过更改数据类型来增加或减少现有列的宽度
  • 将现有的强制列设为可选。
  • 启用或禁用表中的完整性约束。我们还可以从表中添加、修改或删除完整性约束。
  • 我们还可以为表中的现有列指定默认值。

在表中添加新列

使用 ALTER TABLE 命令,我们可以向现有表中添加新列。

语法: 向表中添加新列

在上述语法中, table_name 对应于表的名称,column-definition 对应于列名和数据类型的有效规范。

例子

语法:从表中添加多个列。

ALTER TABLE table_name ADD column_name1, column_name2;

示例

在表中添加约束

您还可以向现有表添加约束。例如:如果您在创建表时忘记添加主键约束,您可以使用 ALTER TABLE 语句添加它。

语法:从表中添加约束。

示例

在向现有表添加新列/关系时,应牢记以下几点:

  • 如果您只添加一个列或约束,则不需要括号。
  • 如果未指定 NULL,则可以随时添加列。如果表为空,则可以使用 NOT NULL 添加新列。

使用 ALTER 修改列

使用 ALTER TABLE,我们可以修改现有表中的列和约束。这些语句可以增加或减少列宽度,并将列从强制改为可选。

语法

示例

SQL 不允许减小列宽度,即使所有列值都具有有效长度。因此,必须将值设置为 NULL 才能减小列的宽度。即使 ADHAR_NUM 列中的所有值都小于 12 个字符,也无法将 ADHAR_NUM 列的宽度从 18 减小到 12,除非 name 列中的所有值都为 null。如果表中该列没有记录,则可以将该列从 NULL 修改为 NOTNULL 约束。

示例

使用 ALTER 删除列和约束

您不仅可以修改列,还可以完全删除它们(如果它们在表中不再需要)。使用 ALTER 命令中的 DROP 语句,我们还可以从表中删除约束。

语法:从表中删除列。

示例

语法:从表中删除多个列。

示例

语法:从表中删除约束。

示例

在删除列/关联时,应牢记以下几点:

  • 您不能删除表中的列。如果您想从表中删除列,则删除是永久性的,因此如果您不小心删除了错误的列,也无法撤销。
  • 您不能删除用户名为 SYS 的列。
  • 如果您想删除主键列,除非您先删除属于它的外键,否则请使用 CASCADE 关键字。

示例

  • 您还可以启用或禁用表中的键约束。这可以在多种情况下完成,例如:在将大量数据加载到表中时、执行批量操作时、迁移组织的遗留数据时。

示例:禁用约束

示例:启用约束

  • 与其删除表中的列,不如将其标记为未使用,以后再删除。这可以加快响应时间。将列标记为未使用后,该列及其所有内容将不再可用,并且将来无法恢复。使用 SELECT 语句将不会检索未使用的列。

示例

重命名表

SQL 提供了一种使用 ALTER TABLE 语句更改表名的方法。

语法

示例

d. TRUNCATE: 用于删除表中的所有行并释放包含该表的空间。

语法

示例

e. RENAME: 用于重命名表。

语法

在上述语法中,RENAME 是一个命令,<OLD_TABLENAME> 是表的名称,<NEW_TABLENAME> 是您更改的名称。

示例

2. 数据操作语言

  • DML 命令用于修改数据库。它负责数据库中的所有更改。
  • DML 命令不是自动提交的,这意味着它们不能永久保存数据库中的所有更改。它们可以回滚。

以下是一些属于 DML 的命令:

DBMS SQL command

a. INSERT: INSERT 语句是一个 SQL 查询。它用于将数据插入到表的行中。要向表中插入新行,您必须拥有该表的 INSERT 权限。

在将数据插入表时应考虑以下几点:

  • 如果您在插入行时未指定列名,SQL 将默认使用所有列。
  • 列名列表中的列数必须与“VALUES”一词后面的括号中出现的数值数量匹配。
  • 列的数据类型及其对应的值必须匹配。

语法:向表中添加行

在上述语法中,TABLE_NAME 是将插入数据的表名。(col1, col2, col3, col N) 是可选的,是将在其中插入值的列的名称。value1 对应于将要插入到 col1 的值,类似地,value2 对应于将要插入到 col2 的值,依此类推。

例如

语法:向表中添加多行

例如

b. UPDATE: 此命令用于更新或修改表中列的值。

语法:更新表中的记录

在上述语法中,table_name 是表的名称,column_name 是表中要修改的列的名称,value1 对应于有效的 SQL 值。“WHERE”是一个条件,它限制了更新的行,对于这些行,指定的条件为真。如果未指定条件,则 SQL 会更新表中的所有行。它包含比较和逻辑运算符等。

在执行 UPDATE 语句时应记住以下几点:

  • 它只引用一个表。
  • 在 SET 子句中,至少必须为 UPDATE 语句分配一个列表达式。
  • 在 WHERE 子句中,您还可以为 UPDATE 语句指定多个条件。

例如

c. DELETE: 用于从表中删除一行或多行。要从表中删除行,它必须在您的模式中,或者您必须拥有 DELETE 权限。

语法:从表中删除记录

在上述语法中,condition 用于 WHERE 子句以过滤要实际删除的记录。您可以从表中删除零行或多行。如果您不使用 WHERE 条件,则 DELETE 语句将删除表中的所有行。您也可以在 WHERE 子句中使用一个或多个条件。

例如

d. SELECT: 这与关系代数中的投影操作相同。它用于根据 WHERE 子句描述的条件选择属性。

语法:用于从表中检索记录

例如

3. 数据控制语言

DCL 命令用于授予和撤销任何数据库用户的权限。

以下是一些属于 DCL 的命令:

DBMS SQL command

语法

在上述语法中,obj_priv> 是 DML 语句,如 INSERT、DELETE、UPDATE 和 SELECT,<obj_name> 是表、视图等,username 是授权用户的姓名。

示例

b. REVOKE: 用于撤销用户的权限。

语法

在上述语法中,obj_priv> 是 DML 语句,如 INSERT、DELETE、UPDATE 和 SELECT,<obj_name> 是表、视图等,username 是要撤销权限的用户的姓名。

示例

4. 事务控制语言

事务是原子的,即要么所有语句都成功,要么没有语句都成功。有许多事务控制语句可用,允许我们控制此行为。这些语句可确保数据一致性。TCL 命令只能与 INSERT、DELETE 和 UPDATE 等 DML 命令一起使用。

这些操作会自动提交到数据库,因此在创建表或删除表时无法使用它们。

以下是一些属于 TCL 的命令:

DBMS SQL command

a. COMMIT: COMMIT 命令用于将所有事务保存到数据库。它使您的更改永久化并结束事务。

语法:永久保存更改

示例

b. ROLLBACK: ROLLBACK 命令用于撤销尚未保存到数据库的事务。Rollback 也用于结束当前事务并开始新事务。

考虑一种情况,您已完成一系列 INSERT、UPDATE 或 DELETE 语句,但尚未显式提交它们,并且遇到了计算机故障等问题,那么 SQL 将自动回滚任何未提交的工作。

语法:撤销更改

示例

c. SAVEPOINT: 用于将事务回滚到某个点,而无需回滚整个事务。

语法

在上述语法中,SAVEPOINT_NAME 是为保存点指定的名称。

要选择性地回滚大型事务中的一组语句,请使用以下命令。

示例

SQL 命令多项选择题

1. 哪个命令用于显示表中的记录?

  1. CREATE TABLE tablename;
  2. DELETE FROM tablename;
  3. SELECT * FROM tablename;
  4. RENAME TABLE tablename;
 

答案:C

说明

SELECT 是一个 DML 语句,用于从表中选择数据。

2. 以下语句在表中执行什么操作?

UPDATE student SET name = "meet" WHERE roll_no =101;

  1. 它不会更新 student 表中的姓名。
  2. 它将更新 name 列的所有值。
  3. 它将 name 列的值更新为“meet”。
  4. 它将 name 列的值更新为“meet”,其中 roll_no =101。
 

答案:D

说明

UPDATE 语句用于更新表的值。上述语句用于更新 student 表中 roll_no =101 的 student 姓名。

3. 以下哪个不是 SQL 中的事务控制语言?

  1. 删除
  2. Save point
  3. 提交
  4. 回滚
 

答案:A

说明

DELETE 是一个 DML 语句,用于从表中删除数据。

4. 哪个命令用于向现有表中添加列?

  1. ALTER TABLE table_name ADD column_name data-type;
  2. ALTER TABLE table_name column_name data-type;
  3. ALTER TABLE table_name ADD;
  4. ALTER TABLE ADD column_name data-type;
 

答案:A

说明

ALTER TABLE 用于修改现有表。在此,ALTER TABLE 命令用于向现有表中添加列。

5. 以下语句在表中执行什么操作?

INSERT INTO student (name,roll_no) VALUES( "meet",101);

  1. 它将 rollno 的值插入表中。
  2. 它将 name、roll_no 列的值插入表中。
  3. 它将 name 的值插入表中。
  4. 以上全部。
 

答案:B

说明

INSERT 语句用于向表中插入值。我们也可以同时插入多行。

6. 删除表中的数据后,哪个命令用于维护表的结构?

  1. 更改
  2. 删除
  3. 拖放
  4. TRUNCATE
 

答案:D

说明

TRUNCATE 语句用于从表中删除数据,但结构保持不变。

7. 哪个命令用于重命名表中的列?

  1. ALTER TABLE old_table_name RENAME TO new_table_name ;
  2. RENAME old_table_name TO new_table_name ;
  3. 以上两者
  4. 以上都不是
 

答案:C

说明

这是一个 DDL 语句,用于将旧名称重命名为新名称。它也与 ALTER 一起用于更改表名。


下一主题DBMS SQL 运算符