Điều gì về Giao dịch? Chúng có Tính năng ROLLBACK.
@see https://dev.mysql.com/doc/refman /5.0/en/commit.html
Ví dụ:
START TRANSACTION;
SELECT * FROM nicetable WHERE somthing=1;
UPDATE nicetable SET nicefield='VALUE' WHERE somthing=1;
SELECT * FROM nicetable WHERE somthing=1; #check
COMMIT;
# or if you want to reset changes
ROLLBACK;
SELECT * FROM nicetable WHERE somthing=1; #should be the old value
Câu trả lời cho câu hỏi từ @rickozoe bên dưới:
Nói chung, các dòng này sẽ không được thực hiện một lần. Trong PHP f.e. bạn sẽ viết một cái gì đó như thế (có lẽ sạch hơn một chút, nhưng muốn trả lời nhanh;-)):
$MysqlConnection->query('START TRANSACTION;');
$erg = $MysqlConnection->query('UPDATE MyGuests SET lastname='Doe' WHERE id=2;');
if($erg)
$MysqlConnection->query('COMMIT;');
else
$MysqlConnection->query('ROLLBACK;');
Một cách khác là sử dụng Biến MySQL (xem https:/ /dev.mysql.com/doc/refman/5.7/en/user-variables.htm đất https://stackoverflow.com/a/18499823/1416909 ):
# do some stuff that should be conditionally rollbacked later on
SET @v1 := UPDATE MyGuests SET lastname='Doe' WHERE id=2;
IF(v1 < 1) THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
Nhưng tôi khuyên bạn nên sử dụng các trình bao bọc ngôn ngữ có sẵn trong ngôn ngữ lập trình yêu thích của bạn.