运行以下语句:
set autocommit = false;
start transaction;
insert into test_table (id,name) values('6','iqbal bano');
虽然我没有发出命令commit
,但该条目已插入数据库。这种行为对mysql
来说是否自然?如果是的话,为什么会这样呢?令我惊讶的是,如果我运行3个语句:
set autocommit = false;
start transaction;
insert into test_table (id,name) values('7','chitra singh');
insert into test_table (id,name) values('8',nayaara);
第三个语句,返回错误(因为nayaara必须包含在引号内)但是,前一个插入成功,并且在id 7
中创建的条目被创建到数据库中。这是什么原因?这是交易进行的方式吗?
注意:Autocommit设置为false,如上面的陈述所示。
答案 0 :(得分:1)
如果将auto-commit设置为false并且插入经过,则它的部分事务但不会提交到数据库。如果要重新启动数据库,插入将丢失;事务是回滚的,因为你没有说提交。但是,如果您提交然后重新启动,则记录不会丢失。
mysql> set autocommit=false;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test (id) values (5),(6),(7),(8);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
+------+
8 rows in set (0.00 sec)
mysql> exit
Bye
mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
mysql> insert into test (id) values (5),(6),(7),(8);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
+------+
8 rows in set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
+------+
8 rows in set (0.00 sec)