数据库语言
客户端可以使用称为数据集管理系统 (DBMS) 的编程来存储、引导和从数据集中恢复数据。DBMS 语言和接口是 DBMS 的重要组成部分,可让用户与数据库系统进行交互。在本文中,我们将使用模型分析一些 DBMS 语言和连接点。
DBMS 语言
数据定义语言 (DDL)
数据定义语言 (DDL) 是一种用于定义数据库结构的数据库语言。客户端可以添加、删除和调整数据集对象,包括表、视图和文件。
DDL 命令
有几种 DDL 命令,例如 −
CREATE
create 命令用于创建新的数据库对象,例如表、视图或索引。 CREATE 命令的语法将根据正在形成的对象的类型而改变。
示例
例如,下面的 SQL 查询创建了"employees"数据库,其中包含"id"、"name"和"salary"列 −
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, salary DECIMAL(10,2) );
输出表
+----+--------+---------+ | id | name | salary | +----+--------+---------+
ALTER
ALTER 用于更改数据库对象的现有结构。您可以使用 ALTER 命令创建、更改或删除列、约束或索引。
示例
例如,"employees"数据库由于以下 SQL 查询而获得一个名为"department"的新字段 -
ALTER TABLE employees ADD department VARCHAR(50);
输出表
+----+--------+--------+-------------+ | id | name | salary | department | +----+--------+--------+-------------+
DROP
DROP 用于删除表、视图或其他现有数据库对象。使用 DROP 命令将永久删除对象和任何相关数据。
示例
例如,使用以下 SQL 查询删除"employees"表 -
DROP TABLE employees;
输出
执行"DROP TABLE employees"命令后,"employees"表及其所有数据将被永久删除,并且不会显示任何输入或输出表。
TRUNCATE
可以使用 TRUNCATE 删除表中已存在的每一条数据。与 DROP 命令相反,Shorten 命令基本上会从数据集中删除信息,而不是实际的表。
示例
假设这是员工的表 −
+----+--------+--------+-------------+ | id | name | salary | department | +----+--------+--------+-------------+ | 1 | Alice | 50000 | Engineering | | 2 | Bob | 60000 | Marketing | | 3 | Charlie| 75000 | Sales | | 4 | Dave | 65000 | Engineering | | 5 | Eve | 55000 | Marketing | +----+--------+--------+-------------+
例如,"employees"表被下面的 SQL 表达式截断 -
TRUNCATE TABLE employees;
Output Table: +----+------+-------+------------+ | id | name | salary| department | +----+------+-------+------------+ | | | | | +----+------+-------+------------+
"employees"表的数据被 TRUNCATE 命令完全删除,但表本身保持不变。运行命令后,表仍会存在,但其中没有数据行。输出表显示运行命令后"employees"表的结构,但没有任何数据。
RENAME
此命令用于重命名现有数据库中的表或列。
示例
输入表
+----+--------+--------+-------------+ | id | name | salary | department | +----+--------+--------+-------------+ | 1 | Alice | 50000 | Engineering | | 2 | Bob | 60000 | Marketing | | 3 | Charlie| 75000 | Sales | | 4 | Dave | 65000 | Engineering | | 5 | Eve | 55000 | Marketing | +----+--------+--------+-------------+
例如,在以下 SQL 查询中,从"employees"表重命名"staff"表 -
RENAME TABLE employees TO staff;
输出表
+----+--------+--------+-------------+ | id | name | salary | department | +----+--------+--------+-------------+ | 1 | Alice | 50000 | Engineering | | 2 | Bob | 60000 | Marketing | | 3 | Charlie| 75000 | Sales | | 4 | Dave | 65000 | Engineering | | 5 | Eve | 55000 | Marketing | +----+--------+--------+-------------+
CQL 命令"RENAME TABLE employees TO staff"只是将当前键空间中现有的"employees"表重命名为"staff",因此输入和输出表没有变化。表的列和内容保持不变。
因此,输入和输出表的数据和结构是相同的。唯一的区别是表的名称,已从"employees"更改为"staff"。
数据库结构的管理取决于 DDL 指令。DBA 可以使用 DDL 命令构建、更改和销毁数据库对象,包括表、视图和索引。此外,数据完整性限制(如主键、唯一约束和外键)通过 DDL 命令强制执行。
数据操作语言 (DML)
您可以使用数据操作语言 (DML)(SQL 的一个子集)更改和编辑关系数据库中的数据。为了插入
DML 命令
有几种 DML 命令,例如 −
INSERT
INSERT 命令用于向表中添加数据。INSERT 命令的语法如下 −
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
示例
假设有一张表,其中包含名为"customers"的列"id"、"name"和"email"。我们可以使用以下命令向表中添加新记录 -
输入表
假设这是我们的初始表
+----+---------+---------------------+ | id | name | email | +----+---------+---------------------+ | 0 | Alice | alice@example.com | | 2 | Bob | bob@example.com | | 3 | Charlie | charlie@example.com | | 4 | Dave | dave@example.com | | 5 | Eve | eve@example.com | +----+---------+---------------------+
INSERT INTO customers (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com');
输出表
+----+---------+---------------------+ | id | name | email | +----+---------+---------------------+ | 0 | Alice | alice@example.com | | 1 | John Doe| john.doe@example.com| | 2 | Bob | bob@example.com | | 3 | Charlie | charlie@example.com | | 4 | Dave | dave@example.com | | 5 | Eve | eve@example.com | +----+---------+---------------------+
UPDATE
可以使用 UPDATE 命令更改表的现有数据。UPDATE 命令具有以下语法 -
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
示例
为了说明,假设我们需要更改 ID 为 1 的客户的电子邮件地址。我们可以使用以下命令来实现此目的 -
输入表
假设这是我们的初始表
+----+---------+---------------------+ | id | name | email | +----+---------+---------------------+ | 0 | Alice | alice@example.com | | 2 | Bob | bob@example.com | | 3 | Charlie | charlie@example.com | | 4 | Dave | dave@example.com | | 5 | Eve | eve@example.com | +----+---------+---------------------+
UPDATE customers SET email = 'johndoe@example.com' WHERE id = 1;
输出表
+----+---------+---------------------+ | id | name | email | +----+---------+---------------------+ | 0 | Alice | alice@example.com | | 1 | John Doe| johndoe@example.com| | 2 | Bob | bob@example.com | | 3 | Charlie | charlie@example.com | | 4 | Dave | dave@example.com | | 5 | Eve | eve@example.com | +----+---------+---------------------+
DELETE
要从表中删除当前数据,请使用 DELETE 命令。DELETE 命令具有以下语法 −
DELETE FROM table_name WHERE condition;
示例
为了说明起见,我们假设我们希望删除 id 为 1 的客户记录。我们可以使用以下命令来实现此目的 −
DELETE FROM customers WHERE id = 1;
使用相同的输入表 −
输出表
+----+---------+---------------------+ | id | name | email | +----+---------+---------------------+ | 0 | Alice | alice@example.com | | 2 | Bob | bob@example.com | | 3 | Charlie | charlie@example.com | | 4 | Dave | dave@example.com | | 5 | Eve | eve@example.com | +----+---------+---------------------+
SELECT
要从表中获取数据,请使用 SELECT 命令。SELECT 命令具有以下语法 -
SELECT column1, column2, ... FROM table_name WHERE condition;
示例
考虑一下我们需要获取每个进行过交易的消费者的姓名和电子邮件地址的情况。我们可以使用以下命令来实现这一点 -
输入表
+----+----------+-----------------------+-------------------+ | id | name | email | has_made_purchase | +----+----------+-----------------------+-------------------+ | 1 | John Doe | john.doe@example.com | true | | 2 | Jane Doe | jane.doe@example.com | false | | 3 | Bob Smith| bob.smith@example.com| true | | 4 | Alice Lee| alice.lee@example.com| true | +----+----------+-----------------------+-------------------+
SELECT name, email FROM customers WHERE has_made_purchase = true;
输出表
+----------+-----------------------+ | name | email | +----------+-----------------------+ | John Doe | john.doe@example.com | | Bob Smith| bob.smith@example.com| | Alice Lee| alice.lee@example.com| +----------+-----------------------+
您可以使用 SQL 的强大子集(称为数据操作语言 (DML))更改和编辑关系数据库中的数据。INSERT、UPDATE、DELETE 和 SELECT 命令是四个主要的 DML 命令。这些命令使您能够向表中添加新数据、编辑现有数据、从表中删除数据以及根据某些条件从表中检索数据。开发人员和数据分析师都使用这些命令,这些命令对于处理数据库至关重要。
数据控制语言 (DCL)
SQL 的一个子集(称为数据控制语言 (DCL))提供了控制对数据库对象访问的指令。它用于管理数据库权限和用户访问。我们将在本文中讨论不同的 DCL 命令并提供使用示例。
DCL 命令
有几种 DCL 命令,例如 −
GRANT
可以使用 GRANT 命令授予用户或角色对数据库对象的指定功能。GRANT 命令具有以下语法 −
GRANT SELECT, INSERT, UPDATE ON employees TO jane;
示例
例如,假设我们有一个名为"employees"的数据库,我们想授予用户"jane"访问 SELECT、INSERT 和 UPDATE 权限。可以使用以下命令 −
GRANT SELECT, INSERT, UPDATE ON employees TO jane;
输出
GRANT 命令实际上并不构建输出表,因此输出表与输入表相同。但是,该命令将允许用户 Jane 访问雇员表上的 SELECT、INSERT 和 UPDATE 函数。
REVOKE
使用 REVOKE 命令可删除用户或角色对数据库对象的先前授予的权限。REVOKE 命令具有以下语法 −
REVOKE privilege_name ON object_name FROM user_or_role;
示例
举例来说,我们希望从"employees"表的 SELECT 权限中删除用户"jane"。可以使用以下命令 -
REVOKE SELECT ON employees FROM jane;
输出
CQL 语句"REVOKE SELECT ON employees FROM jane"只是撤销了之前授予当前键空间中"employees"数据库上用户"jane"的 SELECT 权限,这解释了为什么输入和输出表没有变化。表的列和内容保持不变。
因此,输入和输出表的数据和结构是相同的。唯一的变化是,在当前键空间中,用户"jane"将不再被允许对"employees"表执行 SELECT 查询。
DENY
用户或角色可以使用 DENY 命令拒绝对数据库对象拥有某些权限。DENY 命令具有以下语法 -
DENY permission_name ON object_name TO user_or_role;
示例
例如,假设我们希望阻止用户"jane"将数据插入"employees"数据库。可以使用以下命令 −
DENY INSERT ON employees TO jane;
输出
CQL 语句"DENY INSERT ON employees TO jane"仅禁止"jane"用户尝试将数据插入"employees"表,这解释了为什么输入和输出表保持不变。表的列和内容保持不变。
因此,输入和输出表的数据和结构是相同的。"employees"表的访问控制权限已更改为拒绝"jane"用户的"INSERT"权限,这是唯一不同的地方。
ALTER
可以使用 ALTER 命令更改现有用户或角色的权限。ALTER 命令具有以下语法 -
ALTER USER user_name WITH {GRANT|DENY} permission_name ON object_name;
示例
例如,假设我们希望授予用户"jane"对"employees"表的 SELECT 权限。可以使用以下命令 −
ALTER USER jane WITH GRANT SELECT ON employees;
输出
此命令没有相关的输出表。如果操作成功执行,则仅更新 Cassandra 数据库的用户帐户权限。当用户下次登录或尝试运行需要"employees"表上的 SELECT 权限的查询时,更改的权限将生效。
数据控制语言 (DCL) 中提供了一些命令来控制权限和对数据库对象的访问。DCL 中的主要命令是 ALTER、GRANT、REVOKE 和 DENY。您可以使用这些过程向用户或角色授予或删除数据库对象上的特定功能。数据库管理员和安全专业人员都使用这些命令,因为它们对于管理数据库中的安全性和访问控制至关重要。
事务控制语言 (TCL)
数据库管理系统 (DBMS) 使用事务控制语言 (TCL) 作为处理事务的指令集合。事务的开始和结束点、可见性限制和结果管理均由 TCL 命令控制。大多数 DBMS 提供三个 TCL 命令:COMMIT、ROLLBACK 和 SAVEPOINT。
TCL 命令
有多个 TCL 命令,例如 −
COMMIT
使用 COMMIT 命令可以正确完成事务。使用 COMMIT 命令时,事务期间所做的所有更改都将永久保存到数据库中。COMMIT 命令的语法很简单,如下所示 −
COMMIT;
示例
考虑一个名为"customers"的数据库表,其中包含有关客户的详细信息,如姓名、地址和电话号码。考虑以下修改 ID 为 101 的客户的电话号码的事务:
输入表
+-----+--------+-------------------+ | id | name | phone | +-----+--------+-------------------+ | 100 | Alice | 555-123-4567 | | 101 | Bob | 555-987-6543 | | 102 | Charlie| 555-555-1212 | +-----+--------+-------------------+
START TRANSACTION; UPDATE customers SET phone = '123-456-7890' WHERE id = 101; COMMIT;
输出表
+-----+--------+-------------------+ | id | name | phone | +-----+--------+-------------------+ | 100 | Alice | 555-123-4567 | | 101 | Bob | 123-456-7890 | | 102 | Charlie| 555-555-1212 | +-----+--------+-------------------+
上述代码将启动一个事务,将 ID 101 添加到客户的电话号码,然后提交数据库修改。提交事务后,修改后的电话号码将永久保存在数据库中。
ROLLBACK
要撤消事务或将数据库恢复到之前的状态,请使用 ROLLBACK 命令。使用 ROLLBACK 命令时,数据库将恢复其之前的状态,清除事务期间执行的所有更改。ROLLBACK 命令具有以下语法 -
ROLLBACK;
示例
考虑一个名为"orders"的数据库表,其中包含有关客户订单的数据,包括订单号、日期和总数。假设我们有一个事务将以下新订单添加到数据库 -
输入表
+----------+-------------+--------------+ | order_id | order_date | order_amount | +----------+-------------+--------------+ | 1 | 2023-04-12 | 100.00 | | 2 | 2023-04-13 | 150.00 | +----------+-------------+--------------+
START TRANSACTION; INSERT INTO orders VALUES (1001, '2023-04-14', 50.00); ROLLBACK;
输出表
+----------+-------------+--------------+ | order_id | order_date | order_amount | +----------+-------------+--------------+ | 1 | 2023-04-12 | 100.00 | | 2 | 2023-04-13 | 150.00 | +----------+-------------+--------------+
上述代码将启动一个事务,向数据库添加一个新订单,然后撤消所有数据库修改。当事务回滚时,数据库将返回到其先前的状态,新订单将被删除。
SAVEPOINT
SAVEPOINT 命令用于提供稍后可回滚到的事务点。使用 SAVEPOINT 命令时,将在事务中建立一个保存点。要撤消保存点之后所做的所有更改,请稍后执行 ROLLBACK TO SAVEPOINT 命令。SAVEPOINT 命令具有以下语法 -
SAVEPOINT savepoint_name;
示例
假设我们有一个"库存"数据库表,它提供有关库存的详细信息,例如产品名称、数量和价格。假设我们有一笔修改产品金额的交易,如下所示 -
输入表
+--------------+----------+ | product_name | quantity | +--------------+----------+ | Product A | 20 | | Product B | 30 | +--------------+----------+
START TRANSACTION; UPDATE inventory SET quantity = quantity - 5 WHERE product_name = 'Product A'; SAVEPOINT update_quantity; UPDATE inventory SET quantity = quantity + 5 WHERE product_name = 'Product B'; ROLLBACK TO SAVEPOINT update_quantity; COMMIT;
输出表
+--------------+----------+ | product_name | quantity | +--------------+----------+ | Product A | 15 | | Product B | 30 | +--------------+----------+
总而言之,TCL 命令对于控制 DBMS 中的事务至关重要。要成功完成事务,请使用 COMMIT 命令。要撤消事务并将数据库返回到其之前的状态,请使用 ROLLBACK 语句。最后,使用 SAVEPOINT 命令指定事务中我们稍后可以回滚到的点。通过适当理解和使用 TCL 指令,可以保持数据库的一致性和完整性。
结论
数据库管理系统的接口和语言是至关重要的部分。数据库系统的特定需求决定了要使用的语言和接口。为了确保数据库系统成功,必须仔细考虑这些变量。用户可以通过选择适当的语言和接口以最适合其需求的方式与 DBMS 交互。