Հոդվածների տեղեկատու
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; հնարավոր է օգտագործել ROLLBACK WORK-ը, բայց երկուսը համարժեք են:Հետ վերադարձն ավարտում է օգտատիրոջ գործարքը և չեղարկում ընթացքի մեջ գտնվող բոլոր չհանձնված փոփոխությունները.
- SAVEPOINT նույնացուցիչ, SAVEPOINT-ը թույլ է տալիս գործարքի մեջ ստեղծել պահպանման կետ, և գործարքի մեջ կարող են լինել մի քանի SAVEPOINT;
- ԹՈՂԱՐԿԵԼ SAVEPOINT նույնացուցիչը, ջնջել գործարքի պահպանման կետը, երբ նշված պահման կետ չկա, հայտարարությունը կատարելով բացառություն կստեղծվի.
- ROLLBACK TO նույնացուցիչ, հետ գլորել գործարքը դեպի կետը.
- SET TRANSACTION; օգտագործվում է գործարքի մեկուսացման մակարդակը սահմանելու համար: Գործարքի մեկուսացման մակարդակները, որոնք տրամադրվում են InnoDB պահեստավորման շարժիչով, READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ և SERIALIZABLE են:
MYSQL գործարքների մշակման երկու հիմնական եղանակ կա.
1. Հասնելու համար օգտագործեք BEGIN, ROLLBACK, COMMIT
- BEGIN սկսել գործարք
- Վերադարձ գործարքի վերադարձը
- 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 test.
<?
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);
?>Հույս Chen Weiliang բլոգ ( https://www.chenweiliang.com/ ) կիսվել է «MySQL Database Transaction Rellback Isolation/Open Concept/Level Processing of PHP Statements», որը օգտակար է ձեզ համար:
Բարի գալուստ՝ կիսելու այս հոդվածի հղումը.https://www.chenweiliang.com/cwl-494.html
