Каталог артыкулаў
База дадзеных 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 дазваляе ствараць кропку захавання ў транзакцыі, і ў транзакцыі можа быць некалькі кропак ЗАХАВАННЯ;
- RELEASE SAVEPOINT ідэнтыфікатар, выдаліць кропку захавання транзакцыі, калі няма вызначанай кропкі захавання, выкананне аператара выкліча выключэнне;
- ROLLBACK TO ідэнтыфікатар; адкат транзакцыі да кропкі;
- SET TRANSACTION; выкарыстоўваецца для ўстаноўкі ўзроўню ізаляцыі транзакцыі. Механізм захоўвання InnoDB забяспечвае ўзроўні ізаляцыі транзакцый READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ і SERIALIZABLE.
Ёсць два асноўных метаду апрацоўкі транзакцый MYSQL:
1. Выкарыстоўвайце BEGIN, ROLLBACK, COMMIT для дасягнення
- ПАЧАЦЬ пачаць здзелку
- Адкат адкат транзакцыі
- COMMIT пацвярджэнне транзакцыі
2. Выкарыстоўвайце SET непасрэдна, каб змяніць рэжым аўтафіксацыі MySQL:
- SETAUTOCOMMIT=0 Адключыць аўтаматычную фіксацыю
- SETAUTOCOMMIT=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 у блогу Чэнь Вэйляна, каб атрымліваць апошнія абнаўленні!
📚 Гэты дапаможнік мае вялікую каштоўнасць, 🌟Гэта рэдкая магчымасць, не прапусціце яе! ⏰⌛💨
Падзяліцеся і лайкайце, калі хочаце!
Ваш абмен і лайкі - наша пастаянная матывацыя!