mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb; # 創建數據表
Query OK, 0 rows affected (0.04 sec)
mysql> select * from runoob_transaction_test;
Empty set (0.01 sec)
mysql> begin; # 開始事務
Query OK, 0 rows affected (0.00 sec)
mysql> insert into runoob_transaction_test value(5);
Query OK, 1 rows affected (0.01 sec)
mysql> insert into runoob_transaction_test value(6);
Query OK, 1 rows affected (0.00 sec)
mysql> commit; # 提交事務
Query OK, 0 rows affected (0.01 sec)
mysql> select * from runoob_transaction_test;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.01 sec)
mysql> begin; # 開始事務
Query OK, 0 rows affected (0.00 sec)
mysql> insert into runoob_transaction_test values(7);
Query OK, 1 rows affected (0.00 sec)
mysql> rollback; # 回滾
Query OK, 0 rows affected (0.00 sec)
mysql> select * from runoob_transaction_test; # 因爲回滾所以數據沒有插入
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.01 sec)
mysql>
按照上面的代碼自己寫事務測試,發現回滾失敗,剛開始以爲是自動提交,查看了一下自動提交狀態:
show variables like 'autocommit'\G
果然狀態時開啓的,於是我設置成關閉狀態:
set autocommit=off;
測試了一番還是不行,然後就各種找原因,後面突然想到表類型是MYISAM的,後面把表類型改成InnoDB,就可以了
MYISAM不支持事務