2016-07-16 148 views
1

在運行下面的語句:爲什麼在未提交提交時記錄被插入?

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項創建成數據庫。這是什麼原因?這是交易進行的方式嗎?

注意:自動提交設置爲false,如上述語句所示。

+0

@Drew Autocommit設置爲「false」。請參閱編輯。 –

+0

您好@SuhailGupta能提供這個命令的輸出嗎? SELECT * FROM information_schema.global_variables WHERE variable_name like'%version%'; – Jordon

+0

@ShivaShinde你在找什麼屬性值? –

回答

1

如果將自動提交設置爲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) 
+0

好的。但是當我們執行'select'語句時,我們如何看到數據(在重新啓動數據庫時會丟失數據)? –

+0

我還沒有調查過。但是當我想到它時就會迷失方向。但是,當mysql數據庫設置爲主從數據庫實例時,它確實具有二進制日誌記錄。所以該奴隸可以從主複製數據。可能會打開一個獨立實例的日誌記錄,如果是這種情況,那麼可以通過使用該日誌進行恢復來恢復這些記錄,或者只需對日誌進行逆向工程即可找出發生了什麼。對於主從複製日誌記錄可能不會影響性能,但我不知道單個實例的性能如何。 –

+0

如果你打開日誌記錄,你也將有清理/刪除這些日誌的問題,因爲它們佔用相當多的空間。但是它的全部相關性取決於數據庫中的記錄數量,模式結構等。 –