Справочник на статиите
MySQL база данниИзолиране на връщане на транзакция/отворена концепция/обработка на ниво php оператор
MySQL Дела
MySQL транзакциите се използват главно за обработка на данни с голямо количество операции и висока сложност.Например, в системата за управление на персонала, ако изтриете лице, трябва да изтриете както основната информация за лицето, така и информацията, свързана с лицето, като пощенски кутии, статии и т.н. По този начин тези отчети за работа с база данни представлява сделка!
- Транзакциите се поддържат в MySQL само за бази данни или таблици, които използват системата за база данни Innodb.
- Обработката на транзакции може да се използва за поддържане на целостта на базата данни, като се гарантира, че партидите от SQL изрази са или всички изпълнени, или нито една от тях не е изпълнена.
- Транзакциите се използват за управление на изрази за вмъкване, актуализиране и изтриване
Най-общо казано, транзакцията трябва да отговаря на 4 условия (ACID): Atomicity (атомарност), Consistency (стабилност), Isolation (изолация), Durability (надеждност)
- 1,Атомност на транзакциите:Набор от транзакции, които или са успешни, или се оттеглят.
- 2,стабилност:Има незаконни данни (ограничения на чужд ключ и други подобни) и транзакцията се оттегля.
- 3,Изолация:Транзакциите се извършват независимо.Ако резултатът от транзакция засяга други транзакции, тогава други транзакции ще бъдат оттеглени.100% изолация на транзакциите за сметка на скоростта.
- 4,надеждност:След софтуерния и хардуерния срив драйверът на таблицата с данни на InnoDB ще използва лог файла, за да го реконструира и модифицира.Надеждността и високата скорост не могат да имат и двете, опцията innodb_flush_log_at_trx_commit определя кога да се записват транзакциите в журнала.
При настройките по подразбиране на командния ред на MySQL, транзакциите се извършват автоматично, т.е. операцията COMMIT ще бъде изпълнена веднага след изпълнение на SQL оператора.Следователно, за да отворите транзакция изрично, трябва да използвате командата BEGIN или START TRANSACTION или да изпълните командата SET AUTOCOMMIT=0, за да забраните използването на автоматично ангажиране за текущата сесия.
Изявление за контрол на транзакциите:
- НАЧАЛО или СТАРТИРАНЕ НА ТРАНЗАКЦИЯ; изрично стартиране на транзакция;
- COMMIT; COMMIT WORK също може да се използва, но двете са еквивалентни. COMMIT извършва транзакцията и прави всички промени, направени в базата данни, постоянни;
- ROLLBACK; възможно е да се използва ROLLBACK WORK, но двете са еквивалентни.Връщането приключва транзакцията на потребителя и отменя всички незавършени промени в ход;
- SAVEPOINT идентификатор; SAVEPOINT позволява да се създаде точка за запис в транзакция и може да има множество SAVEPOINT в транзакция;
- Идентификатор RELEASE SAVEPOINT; изтриване на точка за запис на транзакция, когато няма указана точка за запис, изпълнението на израза ще хвърли изключение;
- ROLLBACK TO идентификатор; върнете транзакцията до точката;
- SET TRANSACTION; използва се за задаване на нивото на изолация на транзакцията. Нивата на изолация на транзакциите, осигурени от системата за съхранение на InnoDB, са READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE.
Има два основни метода за обработка на MYSQL транзакции:
1. Използвайте BEGIN, ROLLBACK, COMMIT, за да постигнете
- ЗАПОЧНЕТЕ започнете транзакция
- ВРЪЩАНЕ връщане назад на транзакция
- COMMIT Потвърждение на транзакцията
2. Използвайте директно SET, за да промените режима на автоматично ангажиране на MySQL:
- ЗАДАВАНЕ НА АВТОМАТИЧНО ИЗПЪЛНЕНИЕ=0 Деактивирайте автоматичното ангажиране
- ЗАДАВАНЕ НА АВТОМАТИЧНО ИЗПЪЛНЕНИЕ=1 Включете автоматичното ангажиране
транзакционен тест
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_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 chenweiliang_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 chenweiliang_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 chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
Използване на екземпляри на транзакции в PHP
MySQL ORDER BY тест:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
Блог на Hope Chen Weiliang ( https://www.chenweiliang.com/ ) сподели „Изолиране на връщане назад на транзакция на база данни на MySQL/Отворена концепция/Обработка на ниво на PHP изрази“, което е полезно за вас.
Добре дошли да споделите връзката към тази статия:https://www.chenweiliang.com/cwl-494.html
Добре дошли в канала на Telegram в блога на Chen Weiliang, за да получите най-новите актуализации!
📚 Това ръководство съдържа огромна стойност, 🌟Това е рядка възможност, не я пропускайте! ⏰⌛💨
Споделете и харесайте, ако ви харесва!
Вашите споделяния и харесвания са нашата постоянна мотивация!