SQL 命令的类型

SQL 命令的类型

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

每当我们把数据存储在表或关系中时,就需要使用SQL命令。此外,还需要使用这些命令来检索存储在表中的数据。

SQL 命令的类型

让我们借助实际示例更深入地研究SQL命令的分类。我们将使用MySQL数据库来编写所有查询。

(A) DDL

  • DDL代表数据定义语言。DDL命令处理模式,即存储数据的表。
  • SQL中的DDL命令可以实现对表的所有结构更改,如创建、删除和修改。
  • DDL下的命令包括:
  1. CREATE
  2. ALTER
  3. DROP
  4. TRUNCATE
  5. RENAME

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

1. CREATE:

在SQL中,每当我们想在数据库中创建一个新数据库或表时,我们使用create命令。

CREATE DATABASE DatabaseName;

创建表格的语法:

CREATE TABLE TableName (ColumnName1 datatype, ColumnName2 datatype,….., ColumnName3 datatype);

示例 1:

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

查询:

mysql> CREATE DATABASE SCHOOL;

SQL 命令的类型

在这里,我们执行了一个CREATE DATABASE查询,紧接着是数据库名称’SCHOOL’。

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

mysql> SHOW DATABASES;

SQL 命令的类型

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

示例2:

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

要在’SCHOOL’数据库中创建表’t_school’,我们必须先选中’SCHOOL’数据库。

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

mysql> USE SCHOOL;

SQL 命令的类型

我们已执行“ USE ”命令,其后跟着数据库名称“SCHOOL”。

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

mysql> CREATE TABLE t_school(ID INT PRIMARY KEY, School_Name VARCHAR(40), Number_Of_Students INT, Number_Of_Teachers INT, Number_Of_Classrooms INT, EmailID VARCHAR(40));

SQL 命令的类型

在这里,我们执行了一个CREATE TABLE查询,后面是表名 ‘t_school’。

我们将执行以下命令来验证是否已创建表 ‘t_school’:

mysql> SHOW TABLES;

SQL 命令的类型

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

2. ALTER

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

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

ALTER命令添加新列的语法:

ALTER TABLE table_name ADD column_name datatype(size);

ALTER命令的语法用于删除现有列:

ALTER TABLE table_name DROP COLUMN column_name;

修改命令语法以重命名现有表的列:

ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;

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

ALTER TABLE table_name MODIFY column_name datatype(size);

示例 1:

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

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

mysql> DESC t_school;

SQL 命令的类型

mysql> ALTER TABLE t_school ADD Board_of_Education VARCHAR(20);

SQL 命令的类型

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

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

mysql> DESC t_school;

SQL 命令的类型

这将验证新列“Board_of_Education”已成功添加到t_school表中。

示例2:

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

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

mysql> DESC t_school;

SQL 命令的类型

mysql> ALTER TABLE t_school DROP COLUMN Board_of_Education;

SQL 命令的类型

我们在表格t_school上执行了“ALTER command”,紧接着使用DROP COLUMN关键字,并指定了要删除的列名‘Board_of_Education’。这意味着表格t_school中名为‘Board_of_Education’的列将被删除。

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

mysql> DESC t_school;

SQL 命令的类型

此验证了列“Board_of_Education”已经成功从t_school表中删除。

示例3:

编写一个查询,使用alter命令将列Number_of_Students重命名为“Count_Students”从t_school表中。

在执行查询以将列从“t_school”表中重命名之前,我们将执行以下查询以查看表结构:

mysql> DESC t_school;

SQL 命令的类型

mysql> ALTER TABLE t_school RENAME COLUMN Number_of_Students TO Count_Students;

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

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

mysql> DESC t_school;

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

例子4:

编写一个查询语句,将’t_school’表中’Number_of_Students’的数据类型更改为’VARCHAR’,并设置新的数据类型为’20’。

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

mysql> DESC t_school;

SQL 命令的类型

mysql> ALTER TABLE t_school MODIFY ID VARCHAR(20);

SQL 命令的类型

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

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

mysql> DESC t_school;

SQL 命令的类型

3. DROP

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

语法:

DROP TABLE table_name;

示例:

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

查询:

mysql> DROP TABLE t_school;

SQL 命令的类型

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

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

mysql> SHOW TABLES;

SQL 命令的类型

以上命令的结果验证了在“SCHOOL”数据库中成功删除了“t_school”表。

4. TRUNCATE

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

语法:

TRUNCATE TABLE table_name;

示例:

编写查询以从“t_school”表中删除所有记录。

在执行从“t_school”表中删除记录的查询之前,我们将执行SELECT查询以查看表中的记录:

mysql> SELECT *FROM t_school;
ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
1 Boys Town Public School 1000 80 12 btps15@gmail.com
2 Guru Govind Singh Public School 800 35 15 ggps25@gmail.com
3 Delhi Public School 1200 30 10 dps101@gmail.com
4 Ashoka Universal School 1110 40 40 aus17@gmail.com
5 Calibers English Medium School 9000 31 50 cems@gmail.com
6 Cantonment Board High School 7050 41 60 cbhs@gmail.com
7 Podar International School 12000 120 120 podaris89@gmail.com
8 Barnes School 18000 100 100 barnes99@gmail.com
9 D.S Kothari Kanya School 10000 120 125 ksmh@gmail.com
10 Orchid International School 20000 200 180 ois@gmail.com
mysql> TRUNCATE TABLE t_school;

SQL 命令的类型

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

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

mysql> SELECT *FROM t_school;

SQL 命令的类型

以上结果显示,’t_school’表中的所有记录已成功删除。

5. RENAME

RENAME命令用于给现有表赋予新名称。

重命名表的语法:

RENAME TABLE old_table_name TO new_table_name;

示例:

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

在执行查询以重命名’t_school’表之前,我们将执行SHOW TABLES命令。

mysql>SHOW TABLES;

SQL 命令的类型

mysql> RENAME TABLE t_school TO tbl_school;

SQL 命令的类型

我们在表t_school上执行了’RENAME command’,接着使用’TO’关键字指定了新表名。这意味着’t_school’表现在将被重命名为tbl_school。

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

mysql>SHOW TABLES;

SQL 命令的类型

以上的结果显示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命令用于向表中插入记录。我们可以同时为单个表插入单个记录和多个记录。

语法:

INSERT INTO table_name VALUES (Column1_Value, Column2_Value, …., ColumnN_Value);

示例:

编写一个查询,在t_school表中插入10条记录。

查询语句:

mysql> INSERT INTO t_school(ID, School_Name, Number_of_Students, Number_of_Teachers, Number_of_Classrooms, EmailID) VALUES(1, "Boys Town Public School", 1000, 80, 12, "btps15@gmail.com"), (2, "Guru Govind Singh Public School", 800, 35, 15, "ggps25@gmail.com"), (3, "Delhi Public School", 1200, 30, 10, "dps101@gmail.com"), (4, "Ashoka Universal School", 1110, 40, 40, "aus17@gmail.com"), (5, "Calibers English Medium School", 9000, 31, 50, "cems@gmail.com"), (6, "Cantonment Board High School", 7050, 41, 60, "cbhs@gmail.com"), (7, "Podar International School", 12000, 120, 120, "podaris89@gmail.com"), (8, "Barnes School", 18000, 100, 100, "barnes99@gmail.com"), (9, "D.S Kothari Kanya School", 10000, 120, 125, "ksmh@gmail.com"), (10, "Orchid International School", 20000, 200, 180, "ois@gmail.com");

SQL 命令的类型

由于我们希望在表中插入十个记录,所以我们没有写十次INSERT命令,而是写了一个单独的INSERT命令来一次性插入多个记录。

2. SELECT

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

检索所有记录的语法:

SELECT *FROM table_name;

检索特定记录的语法:

SELECT *FROM table_name WHERE condition;

示例1:

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

查询:

mysql> SELECT *FROM t_school;

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

输出:

ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
1 Boys Town Public School 1000 80 12 btps15@gmail.com
2 Guru Govind Singh Public School 800 35 15 ggps25@gmail.com
3 Delhi Public School 1200 30 10 dps101@gmail.com
4 Ashoka Universal School 1110 40 40 aus17@gmail.com
5 Calibers English Medium School 9000 31 50 cems@gmail.com
6 Cantonment Board High School 7050 41 60 cbhs@gmail.com
7 Podar International School 12000 120 120 podaris89@gmail.com
8 Barnes School 18000 100 100 barnes99@gmail.com
9 D.S Kothari Kanya School 10000 120 125 ksmh@gmail.com
10 Orchid International School 20000 200 180 ois@gmail.com

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

示例2:

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

查询:

mysql> SELECT *FROM t_school WHERE Number_Of_Classrooms > 11;

我们使用星号(*)在t_school表上执行了一个SELECT查询,然后是一个WHERE子句条件。由于WHERE子句条件,在“Number_of_classrooms”列中值大于11的记录才会被检索出来。

输出:

ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
1 Boys Town Public School 1000 80 12 btps15@gmail.com
2 Guru Govind Singh Public School 800 35 15 ggps25@gmail.com
4 Ashoka Universal School 1110 40 40 aus17@gmail.com
5 Calibers English Medium School 9000 31 50 cems@gmail.com
6 Cantonment Board High School 7050 41 60 cbhs@gmail.com
7 Podar International School 12000 120 120 podaris89@gmail.com
8 Barnes School 18000 100 100 barnes99@gmail.com
9 D.S Kothari Kanya School 10000 120 125 ksmh@gmail.com
10 Orchid International School 20000 200 180 ois@gmail.com

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

3. UPDATE

UPDATE命令用于修改表中的值。每当我们希望更新表中任何记录的值时,我们将使用SQL中的UPDATE命令。

语法:

UPDATE table_name SET column_name = value WHERE condition;

示例:

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

查询语句:

mysql> UPDATE t_school SET Number_Of_Teachers = 125, Number_Of_Classrooms = 120 WHERE ID=9;

SQL 命令的类型

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

mysql> SELECT *FROM t_school WHERE ID=9;
ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
9 D.S Kothari Kanya School 10000 125 120 ksmh@gmail.com

4. DELETE

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

语法:

DELETE FROM table_name;

示例:

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

查询:

mysql> DELETE FROM t_school WHERE ID = 6;

SQL 命令的类型

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

mysql> SELECT * FROM t_school;
ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
1 Boys Town Public School 1000 80 12 btps15@gmail.com
2 Guru Govind Singh Public School 800 35 15 ggps25@gmail.com
3 Delhi Public School 1200 30 10 dps101@gmail.com
4 Ashoka Universal School 1110 40 40 aus17@gmail.com
5 Calibers English Medium School 9000 31 50 cems@gmail.com
7 Podar International School 12000 120 120 podaris89@gmail.com
8 Barnes School 18000 100 100 barnes99@gmail.com
9 D.S Kothari Kanya School 10000 120 125 ksmh@gmail.com
10 Orchid International School 20000 200 180 ois@gmail.com

结果显示,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:

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

2. ROLLBACK

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

3. SAVEPOINT

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

示例:

mysql> START TRANSACTION;

SQL 命令的类型

mysql>INSERT INTO t_school(ID, School_Name, Number_of_Students, Number_of_Teachers, Number_of_Classrooms, EmailID) VALUES(1, "Boys Town Public School", 1000, 80, 12, "btps15@gmail.com"), (2, "Guru Govind Singh Public School", 800, 35, 15, "ggps25@gmail.com"), (3, "Delhi Public School", 1200, 30, 10, "dps101@gmail.com"), (4, "Ashoka Universal School", 1110, 40, 40, "aus17@gmail.com"), (5, "Calibers English Medium School", 9000, 31, 50, "cems@gmail.com");

SQL 命令的类型

mysql> COMMIT;

SQL 命令的类型

mysql> SET autocommit = 0;

SQL 命令的类型

mysql> SAVEPOINT ins;

SQL 命令的类型

直到这一点,我们已经开始了一个事务,在其中插入记录,提交了事务,并在插入之后创建了一个SAVEPOINT。

mysql> DELETE FROM t_school WHERE ID = 3;

SQL 命令的类型

mysql> SAVEPOINT del;

SQL 命令的类型

我们已经删除了一条记录并在删除之后创建了一个保存点del,但是后来我们意识到我们需要最近删除的记录。因此,我们将回滚到SAVEPOINT ins。

mysql> ROLLBACK TO ins;

SQL 命令的类型

mysql> SELECT *FROM t_school;
ID School_Name Number_Of_Students Number_Of_Teachers Number_Of_Classrooms EmailID
1 Boys Town Public School 1000 80 12 btps15@gmail.com
2 Guru Govind Singh Public School 800 35 15 ggps25@gmail.com
3 Delhi Public School 1200 30 10 dps101@gmail.com
4 Ashoka Universal School 1110 40 40 aus17@gmail.com
5 Calibers English Medium School 9000 31 50 cems@gmail.com

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程