Recently, I encountered the problem of data confusion when using MySQL and opening transactions multiple times. The pseudo code is as follows:
begin; # 操作1 begin; # 操作2 rollback;
Operation 1# occurred after execution. The data of ## is actually written, and only the data of operation 2 of is rolled back. When the first transaction is not committed or rolled back, when the second transaction is started, the first transaction will be automatically committed.
This is obviously not in line with psychological expectations, and it is impossible to roll back part of the operation. So here comes the question,Does MySQL support transaction nesting?
This question is difficult to answer accurately whether it is supported or not! First of all, calling begin multiple times will definitely not allow transaction nesting in MySQL. After being reminded by a friend in the group, I learned that there is a statement called savepoint and rollback to in MySQL.Sample code:
DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; begin; insert into `test`(`name`) values('111'); SAVEPOINT p1; insert into `test`(`name`) values('222'); ROLLBACK TO p1; commit;
The above is the detailed content of Does MySQL support transaction nesting?. For more information, please follow other related articles on the PHP Chinese website!