11

我有一个关于 MySQL 的问题,但一直找不到答案。我知道自动提交在 MySQL 中默认是打开的。我需要在一个事务中从命令行运行一些更新查询,但我不知道 MySQL 将如何处理它们。如果我有这样的事情:

mysql -uroot -proot -e 'QUERY 1; QUERY 2; QUERY3'

它会作为一个事务执行还是 MySQL 会单独自动提交每个语句?我需要确保原子性。

4

2 回答 2

13

您可以使用 MySQL 的START TRANSACTION语法来创建事务提交:

来源:http ://dev.mysql.com/doc/refman/5.0/en/commit.html

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

您还可以将查询写入 .sql 文件,并将其通过管道传输到 mysql:

$ cat query.sql | mysql -uroot -proot
于 2013-04-28T04:56:43.207 回答
4

管道是个好主意!

echo "START TRANSACTION;" > start.sql
echo "COMMIT;" > commit.sql

cat start.sql yourScript.sql commit.sql | mysql -uroot -proot

或者

cat start.sql yourScript.sql - | mysql -uroot -proot

因此,您可以根据 yourScript 的结果手动提交 o 回滚

祝你好运!

于 2015-10-23T07:55:43.623 回答