📜  在 sql 中开始事务(1)

📅  最后修改于: 2023-12-03 15:07:49.572000             🧑  作者: Mango

在 SQL 中开始事务

在 SQL 中,我们可以使用事务来保证一系列操作的原子性和一致性。事务指的是一组指令,它们按照一定的逻辑顺序执行,并且要么全部执行成功,要么全部不执行。

为了开始一个事务,我们需要使用 BEGIN TRANSACTION 或简写的 BEGIN 来告诉 SQL,接下来要执行的一系列指令被视为一个事务。这个语句可以在 SQL 的大部分实现中使用,包括 MySQL、PostgreSQL 和 SQLite 等。

具体的语法如下:

BEGIN TRANSACTION;

在事务中,我们可以执行一系列的操作,包括新增、修改和删除等操作。当所有的操作都执行结束后,我们需要使用 COMMIT 来提交事务,这时候 SQL 会将之前的所有修改都应用到数据库当中。如果在事务中发生了错误,我们可以使用 ROLLBACK 来回滚事务,将数据库恢复到事务开始时的状态。

下面是一个使用事务的示例,我们假设有一张名为 users 的表,在这个表中,我们要同时插入两个用户记录,并且将他们的手机号码设置为 123456

BEGIN TRANSACTION;

INSERT INTO users (name, phone) VALUES ('Alice', '123456');
INSERT INTO users (name, phone) VALUES ('Bob', '123456');

COMMIT;

在这个例子中,我们使用了 INSERT INTO 来将两个用户记录插入到 users 表中,这个语句的语法和普通的 INSERT INTO 是一样的。不同的是,在这个语句前面加上了一个 BEGIN TRANSACTION,表示这个插入操作被视为一个事务。在插入操作完成后,我们使用了 COMMIT 来提交这个事务,这时候 SQL 会将之前的修改应用到数据库当中。

如果我们在执行的过程中发生了错误,比如第二个插入操作执行失败了,我们可以使用 ROLLBACK 来回滚事务,将之前的修改都撤销掉:

BEGIN TRANSACTION;

INSERT INTO users (name, phone) VALUES ('Alice', '123456');
INSERT INTO users (name, phone) VALUES ('Bob', '567890'); -- 这里出错了,手机号码不能是 567890

ROLLBACK;

在这个例子中,第二个插入操作中的手机号码设置成了 567890,这是一个错误的值,因为我们事先已经约定所有的手机号码都是 123456。在执行到这个操作时,SQL 会抛出一个错误,这时候我们可以使用 ROLLBACK 来回滚事务,撤销之前的 INSERT 操作。

总结一下,在 SQL 中,我们可以使用事务来保证一系列操作的原子性和一致性。在事务中,我们使用 BEGIN TRANSACTION 来开始一个事务,然后执行一系列操作,最后使用 COMMIT 来提交事务,或者使用 ROLLBACK 来回滚事务。