SQL 提交
提交和回滚是在实现事务语句时经常使用的SQL命令,它们使用户能够完成或撤销SQL事务。在理解SQL中提交命令的功能之前,我们首先必须了解事务的含义。事务是一个逻辑术语,它由安排的指令或查询组成,以完成一个事务。每个事务都以特定的目标开始。它从执行特定任务和特定组任务开始,以确保目标的完成。
如果执行事务所需的任何任务失败,整个事务被视为失败。为了使SQL中的事务完整,所有查询和任务都应该完全执行。执行任何事务的步骤如下:
- 开始事务
- 设置事务
- 提交事务
- 回滚和保存点的事务
在本教程中,我们只讨论在SQL中实现提交命令的内容。
SQL中的提交是什么?
提交是一种SQL命令,它使用户能够在关系数据库或事务表中永久保存当前的事务或数据库语句。这是为了确保事务成功执行并将修改应用于数据库。一旦在事务中执行了提交命令,对于所有能够访问数据库的用户,事务期间发生的更改都将变为永久性的。由于更改已经永久保存在数据库中,无法回到系统中事务开始之前数据库所处的先前状态。
提交的语法
在数据库中提交数据的语法如下:
COMMIT;
实现提交
考虑一个存储员工ID、姓名、年龄和地址的员工表。表格如下所示:
CREATE TABLE Employee
(
Emp_id int auto_increment primary key,
fname varchar(100) NOT NULL,
lname varchar(100) NOT NULL,
Address varchar(100),
Dept_id int default 10,
Doj date);
在下面的表格中添加数据:
INSERT INTO Employee (fname, lname, Doj) VALUES ('Rahul',' Sharma', '2023-05-25');
INSERT INTO Employee (fname, lname, Doj) VALUES ('Amit',' Verma', '2023-05-25');
INSERT INTO Employee (fname, lname, Doj) VALUES ('Ishika',' Yadav', '2023-05-25');
INSERT INTO Employee (fname, lname, Doj) VALUES ('Varun',' Gupta', '2023-05-25');
INSERT INTO Employee (fname, lname, Doj) VALUES ('Arun',' Jain', '2023-05-25');
INSERT INTO Employee (fname, lname, Doj) VALUES ('Vijay',' Sharma', '2023-05-25');
输出:
考虑一个情况,用户想要删除名为Varun的员工的记录。在表中执行删除操作后,用户可以实施提交语句,将对所有可以访问数据库的用户永久保存更改。实施上述操作的查询如下:
DELETE from Employees Where fname = 'Varun';
COMMIT;
为了确保更改在数据库中永久提交,用户可以实施Select查询来从数据库中获取所有剩余的条目。查询如下所示:
Select * from Employees;
输出:
在上面的表中,当执行COMMIT查询时,它会永久保存EMPLOYEES表的更改,这些更改对所有数据库用户可见。
SQL中的COMMIT如何工作?
COMMIT是执行事务时的基本命令,使用户能够将特定事务所进行的修改保存到DBMS中。它确保在提交数据库更改之前执行的所有修改都是永久的。它还确保所有修改都可以回滚。
传统命令如COMMIT和ROLLBACK遵循MySQL中的ACID属性。ACID属性包括:
原子性: 这个属性确保事务是否完成并执行。事务不能部分实施。例如,当用户从一个账户转账到另一个账户时。事务中的所有任务必须完全完成。这意味着钱将从第一个账户扣除并存入第二个账户,或者转账不会发生。也就是说,资金将被从账户中扣除,账户中也不会存入资金。
一致性: 事务应该在数据库中维护一致性。这意味着如果在数据库表中执行了更改,则应该在关联的表中执行相应的更改。例如,如果用户在线预订了火车票,那么与预订相关的详细信息应该在数据库的所有关联表中进行更新。这确保了数据库中存储的信息在整个数据库中是一致的。
隔离性: 它确保一个事务所执行的更改不会影响到其他事务。
持久性: 一旦事务提交,更改就是永久和持久的。例如,向数据库添加新记录,即使系统崩溃,记录也会保留。
如何在SQL Server中使用COMMIT?
在SQL Server中实现COMMIT语句的语法与SQL中使用的语法不同。
SQL Server中COMMIT的语法
在SQL Server中实现COMMIT的语法如下:
BEGIN TRANSACTION;
{Set of SQL statements performed in the transaction};
COMMIT TRANSACTION;
以上语法以实现BEGIN TRANSACTION SQL语句开始,因为它使用户能够启动新的事务。下一步是使用一组SQL语句。这些语句确定在事务中执行的任务。一旦执行了所有的SQL语句,下一步就是保存事务。该语法中执行的最后一条语句是COMMIT事务,它确保了事务之后的所有更改都永久保存在数据库中。
实现SQL COMMIT语句
在实现COMMIT语句之前,用户需要一个表来实现SQL命令。执行以下SQL语句在数据库中创建一个名为Employee的表。
CREATE TABLE Employee
(
Emp_id int primary key,
Fname varchar(100) NOT NULL,
Lname varchar(100) NOT NULL,
Address varchar(100),
Dept_id int default 10,
Doj date);
在上面的雇员表中添加数据:
INSERT INTO Employee (Emp_id, fname, lname, Doj) VALUES (1,'Rahul',' Sharma', '2023-05-25');
INSERT INTO Employee (Emp_id, fname, lname, Doj) VALUES (2,'Amit',' Verma', '2023-05-25');
INSERT INTO Employee (Emp_id, fname, lname, Doj) VALUES (3,'Ishika',' Yadav', '2023-05-25');
INSERT INTO Employee (Emp_id, fname, lname, Doj)VALUES (4,'Varun',' Gupta', '2023-05-25');
INSERT INTO Employee (Emp_id, fname, lname, Doj) VALUES (5,'Arun',' Jain', '2023-05-25');
INSERT INTO Employee (Emp_id, fname, lname, Doj) VALUES (6,'Vijay',' Sharma', '2023-05-25');
使用DELETE命令实现COMMIT语句
BEGIN TRANSACTION;
DELETE FROM Employee WHERE fname= 'Ishika';
COMMIT TRANSACTION;
使用INSERT命令实现COMMIT语句
BEGIN TRANSACTION;
INSERT INTO Employee ( fname,lname,DOJ) VALUES (7,'Vikas',' Gupta', '2023-05-25');
COMMIT TRANSACTION;
输出结果: