Каталог статей
База данных MySQLИзоляция отката транзакции/открытая концепция/уровень обработки php-оператора
MySQL Дел
Транзакции MySQL в основном используются для обработки данных с большим количеством операций и высокой сложностью.Например, в системе управления персоналом, если вы удаляете человека, вам необходимо удалить как основную информацию о человеке, так и информацию, связанную с человеком, такую как почтовые ящики, статьи и т. д. Таким образом, эти инструкции по работе с базой данных составляют сделку!
- Транзакции поддерживаются в MySQL только для баз данных или таблиц, которые используют ядро базы данных Innodb.
- Обработку транзакций можно использовать для поддержания целостности базы данных, гарантируя, что либо все пакеты операторов SQL будут выполнены, либо ни один из них не будет выполнен.
- Транзакции используются для управления операторами вставки, обновления и удаления.
Вообще говоря, транзакция должна соответствовать 4 условиям (ACID): Atomity (атомарность), 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); ?>
Блог Хоуп Чен Вейлян ( https://www.chenweiliang.com/ ) поделился "Изоляция отката транзакций базы данных MySQL/Открытая концепция/Уровень обработки операторов PHP", который будет полезен для вас.
Добро пожаловать, чтобы поделиться ссылкой на эту статью:https://www.chenweiliang.com/cwl-494.html
Добро пожаловать на Telegram-канал блога Chen Weiliang, чтобы быть в курсе последних обновлений!
📚 Это руководство содержит огромную ценность. 🌟Это редкая возможность, не упустите ее! ⏰⌛💨
Делитесь и ставьте лайк, если хотите!
Ваш обмен и лайки - наша постоянная мотивация!