pelrêça gotarê
Databasa MySQLVeguheztina danûstendinê veqetandina / vekirina konsepta / danûstendinên php-ê yên pêvajoyê
MySQL Karûbarên
Danûstandinên MySQL bi gelemperî ji bo pêvajoyên daneyên bi operasyonên mezin û tevliheviya bilind têne bikar anîn. Mînakî, di pergala rêvebirina personelê de, heke hûn kesek jêbirin, hûn hewce ne ku agahdariya bingehîn a kesê jêbirin, û her weha agahdariya ku bi kesê ve girêdayî ye, wekî qutiya posteyê, gotar û hwd. Bi vî awayî, ev databas daxuyaniyên operasyonê danûstendinek pêk tîne. !
- Di MySQL de, tenê databas an tabloyên ku danûstandinên piştgirîya motora databasa Innodb bikar tînin bikar tînin.
- Pêvajoya danûstendinê dikare were bikar anîn da ku yekdestiya databasê biparêze û pê ewle bibe ku komên daxuyaniyên SQL hemî hatine darve kirin an jî qet nayên darve kirin.
- Danûstandin ji bo birêvebirina danezan, nûvekirin û jêbirinê têne bikar anîn
Bi gelemperî, danûstendin divê çar şertan (ACID) bicîh bînin: Atomî (atomî), hevgirtî (îstîqrar), veqetandin (veqetandin), domdarî (bawerî)
- 1,Atomîbûna danûstandinan:Komek danûstendinan an bi ser dikeve an jî tê vekişandin.
- 2,nehejî:Daneyên neqanûnî hene (astengên sereke yên biyanî û yên wekî), û danûstendin tê vekişandin.
- 3,Cudakirin:Danûstandin serbixwe dimeşin. Ger encama yek danûstendinê bandorê li danûstandinên din bike, dê danûstandinên din werin vekişandin. 100% îzolekirina danûstendinan bi leza qurbankirinê hewce dike.
- 4,pêbawerî:Piştî ku nermalava an hardware têk diçe, ajokera tabloya daneya InnoDB dê pelê têketinê bikar bîne da ku wê ji nû ve ava bike û biguhezîne. Pêbawerî û leza bilind li hev nayên.Vebijarka innodb_flush_log_at_trx_commit diyar dike ku kengê danûstandinan li têketinê tomar bike.
Di binê mîhengên xwerû yên rêzika fermanê ya MySQL de, danûstendin bixweber têne kirin, ango, operasyona COMMIT dê tavilê piştî pêkanîna daxuyaniya SQL were kirin. Ji ber vê yekê, ji bo ku hûn bi eşkere dest bi danûstendinê bikin, divê hûn fermana DESTPÊK an DESTPÊK TRANSACTIONê bikar bînin, an jî fermana SET AUTOCOMMIT=0 bi cih bînin da ku ji bo danişîna heyî karanîna peywira otomatîk neçalak bikin.
Daxuyaniya kontrola danûstendinê:
- DESTPÊKIN an DESTPÊKIRINÊ DESTPÊ KIRIN; bi eşkere dest bi danûstendinê bikin;
- COMMIT; hûn dikarin COMMI WORK-ê jî bikar bînin, lê ew wekhev in. COMMIT danûstendinê pêk tîne û hemî guhertinên ku li databasê hatine kirin daîmî dike;
- ROLLBACK; hûn dikarin ROLLBACK WORK bikar bînin, lê ew wekhev in. Rollback dê danûstendina bikarhêner biqedîne û hemî guheztinên nepabendkirî yên di pêşkeftinê de betal bike;
- Nasnameya SAVEPOINT; SAVEPOINT dihêle ku di danûstendinê de nuqteyek hilanînê were afirandin, û di danûstendinek de dikare gelek SAVEPOINT hebin;
- RELEASE SAVEPOINT Nasname;Nala hilanînê ya danûstendinê jêdibe.Dema ku xala hilanînê ya diyarkirî tune be, pêkanîna vê gotinê dê îstîsnayekê bavêje;
- ROLLBACK TO identifier;
- SET TRANSACTION; ji bo danîna asta veqetandinê ya danûstendinê tê bikar anîn. Asta îzolasyona danûstendinê ya ku ji hêla motora hilanînê InnoDB ve hatî peyda kirin READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ û SERIALIZABLE ne.
Du rêbazên sereke ji bo pêvajoyek danûstendina MYSQL hene:
1. Ji bo bicihanîna DESTPÊK, ROLLBACK, COMMIT bikar bînin
- DESTPÊKIRIN dest bi danûstendinê bike
- PAŞ DIKIN vegerandina danûstendinê
- BIKARANÎN pejirandina danûstandinê
2. SET rasterast bikar bînin da ku moda xweseriya MySQL biguherînin:
- SETAUTOCOMMIT=0 Radestkirina otomatîkî neçalak bike
- SETAUTOCOMMIT=1 Radestkirina otomatîkî vekin
Testkirina danûstandinê
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>
Di PHP-ê de mînakên danûstendinê bikar tînin
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); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) "Daneya Daneya MySQL Veguheztina Vegerandina Veqetandinê / Têgîna Vekirina / Daxuyaniya Pêvajoya Asta PHP" parve kir, ku dê ji we re bibe alîkar.
Bi xêr hatî bo parvekirina girêdana vê gotarê:https://www.chenweiliang.com/cwl-494.html
Hûn bi xêr hatin kanala Telegramê ya bloga Chen Weiliang da ku nûvekirinên herî dawî bistînin!
📚 Ev rêber nirxek pir mezin dihewîne, 🌟Ev derfetek kêm e, wê ji dest nede! ⏰⌛💨
Heke hûn hez dikin parve bikin û hez bikin!
Parvekirin û ecibandinên we motîvasyona meya domdar e!