Мақала анықтамалығы
MySQL деректер қорыТранзакцияны кері қайтару оқшаулау/ашық тұжырымдама/деңгейді өңдеу PHP мәлімдемесі
MySQL Істер
MySQL транзакциялары негізінен операциялардың үлкен көлемі мен күрделілігі жоғары деректерді өңдеу үшін қолданылады.Мысалы, персоналды басқару жүйесінде, егер сіз адамды жойсаңыз, сіз тұлғаның негізгі ақпаратын да, пошта жәшіктері, мақалалар және т.б. сияқты адамға қатысты ақпаратты да жоюыңыз керек. Осылайша, бұл дерекқор жұмысының мәлімдемелері транзакцияны құрайды!
- MySQL жүйесінде транзакцияларға Innodb дерекқор механизмін пайдаланатын дерекқорлар немесе кестелер үшін ғана қолдау көрсетіледі.
- Мәліметтер қорының тұтастығын сақтау үшін транзакцияларды өңдеуді қолдануға болады, бұл SQL мәлімдемелерінің топтамаларының барлығы орындалғанын немесе олардың ешқайсысы орындалмағанын қамтамасыз етеді.
- Транзакциялар кірістіру, жаңарту, жою мәлімдемелерін басқару үшін қолданылады
Жалпы айтқанда, транзакция 4 шартқа сәйкес болуы керек (ACID): Атомдық (атомдық), Консистенция (тұрақтылық), Оқшаулау (оқшаулау), Тұрақтылық (сенімділік)
- 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; ROLLACK WORK қолдануға болады, бірақ екеуі баламалы.Кері қайтару пайдаланушы транзакциясын аяқтайды және орындалып жатқан барлық қабылданбаған өзгертулерді болдырмайды;
- SAVEPOINT идентификаторы;SAVEPOINT транзакцияда сақтау нүктесін жасауға мүмкіндік береді және транзакцияда бірнеше SAVEPOINT болуы мүмкін;
- RELEASE SAVEPOINT идентификаторы; транзакцияның сақтау нүктесін жою, егер анықталған сақтау нүктесі болмаса, операторды орындау ерекше жағдайды тудырады;
- ROLLBACK TO идентификатор;транзакцияны нүктеге қайтару;
- SET TRANSACTION; транзакцияның оқшаулау деңгейін орнату үшін пайдаланылады. InnoDB сақтау механизмі READ COMMITTED, READ COMMITTED, ҚАЙТАЛАУЛЫ ОҚУ және SERIALIZABLE транзакцияларды оқшаулау деңгейлерін қамтамасыз етеді.
MYSQL транзакцияларын өңдеудің екі негізгі әдісі бар:
1. Қол жеткізу үшін BEGIN, ROLLACK, COMMIT пайдаланыңыз
- BEGIN транзакцияны бастау
- Кері байланыс транзакцияны кері қайтару
- COMMIT Транзакцияны растау
2. MySQL автоматты түрде орындау режимін өзгерту үшін тікелей SET пайдаланыңыз:
- АВТОКОМИТЕТТІ ОРНАТУ=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 тесті бойынша ТАПСЫРЫС:
<? 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 арнасына қош келдіңіз!
📚 Бұл нұсқаулықта үлкен құндылық бар, 🌟Бұл сирек мүмкіндік, оны жіберіп алмаңыз! ⏰⌛💨
Ұнаса лайк басып, бөлісіңіз!
Сіздің бөлісулеріңіз бен лайктарыңыз - біздің үздіксіз мотивациямыз!