אַרטיקל וועגווייַזער
MySQL דאַטאַבייסטראַנסאַקטיאָן ראָולבאַק אפגעזונדערטקייט / עפענען באַגריף / פּראַסעסינג פפּ ויסזאָגונג
מיסקל ענינים
MySQL טראַנזאַקשאַנז זענען דער הויפּט געניצט צו פּראָצעס דאַטן מיט אַ גרויס סומע פון אַפּעריישאַנז און הויך קאַמפּלעקסיטי.פֿאַר בייַשפּיל, אין די פּערסאַנעל פאַרוואַלטונג סיסטעם, אויב איר ויסמעקן אַ מענטש, איר דאַרפֿן צו ויסמעקן ביידע די יקערדיק אינפֿאָרמאַציע פון דעם מענטש און די אינפֿאָרמאַציע שייַכות צו דעם מענטש, אַזאַ ווי מיילבאַקסיז, אַרטיקלען, אאז"ו ו. אין דעם וועג, די דאַטאַבייס אָפּעראַציע סטייטמאַנץ קאַנסטאַטוט אַ מאַסע - מאַטן !
- טראַנזאַקשאַנז זענען געשטיצט אין MySQL בלויז פֿאַר דאַטאַבייסיז אָדער טישן וואָס נוצן די Innodb דאַטאַבייס מאָטאָר.
- טראַנסאַקטיאָן פּראַסעסינג קענען ווערן גענוצט צו האַלטן די אָרנטלעכקייַט פון די דאַטאַבייס, און ינשורינג אַז באַטשאַז פון סקל סטייטמאַנץ זענען אָדער אַלע עקסאַקיוטאַד אָדער גאָרניט פון זיי זענען עקסאַקיוטאַד.
- טראַנזאַקשאַנז זענען געניצט צו פירן אַרייַנלייגן, דערהייַנטיקן, ויסמעקן סטייטמאַנץ
אין אַלגעמיין, טראַנזאַקשאַנז מוזן טרעפן 4 טנאָים (אַסיד): אַטאָמיסיטי (אַטאָמיסיטי), קאָנסיסטענסי (סטאַביליטי), אפגעזונדערטקייט (אפגעזונדערטקייט), געווער (רעליאַביליטי)
- קסנומקס,אַטאָמיקייט פון טראַנזאַקשאַנז:א סכום פון טראַנזאַקשאַנז וואָס זענען געראָטן אָדער צוריקציען.
- קסנומקס,פעסטקייַט:עס זענען ומלעגאַל דאַטן (פרעמד שליסל קאַנסטריינץ און די ווי), און די טראַנסאַקטיאָן איז וויטדראָן.
- קסנומקס,איזאלאציע:טראַנזאַקשאַנז לויפן ינדיפּענדאַנטלי.אויב דער רעזולטאַט פון אַ טראַנסאַקטיאָן אַפעקץ אנדערע טראַנזאַקשאַנז, אנדערע טראַנזאַקשאַנז וועט זיין וויטדראָן.100% אפגעזונדערטקייט פון טראַנזאַקשאַנז אין די קאָסט פון גיכקייַט.
- קסנומקס,רילייאַבילאַטי:נאָך די ווייכווארג און ייַזנוואַרג קראַך, די InnoDB דאַטן טיש שאָפער וועט נוצן די קלאָץ טעקע צו רעקאָנסטרוירן און מאָדיפיצירן עס.רילייאַבילאַטי און הויך גיכקייַט קענען נישט האָבן ביידע, די Innodb_flush_log_at_trx_commit אָפּציע דיטערמאַנז ווען צו ראַטעווען טראַנזאַקשאַנז צו די קלאָץ.
אונטער די פעליקייַט סעטטינגס פון די MySQL באַפֿעלן שורה, טראַנזאַקשאַנז זענען אויטאָמאַטיש באגאנגען, דאָס איז, די COMMIT אָפּעראַציע וועט זיין עקסאַקיוטאַד מיד נאָך די סקל ויסזאָגונג איז עקסאַקיוטאַד.דעריבער, צו בפירוש עפענען אַ טראַנסאַקטיאָן מוזן נוצן די באַפֿעל BEGIN אָדער START TRANSACTION, אָדער ויספירן די באַפֿעל SET AUTOCOMMIT = 0, צו דיסייבאַל די נוצן פון אָטאַמאַטיק יבערגעבן פֿאַר דעם קראַנט סעסיע.
טראַנסאַקטיאָן קאָנטראָל דערקלערונג:
- אָנהייב אָדער אָנהייב טראַנסאַקטיאָן; בפירוש אָנהייבן אַ טראַנסאַקטיאָן;
- COMMIT; COMMIT WORK קענען אויך זיין געוויינט, אָבער די צוויי זענען עקוויוואַלענט. COMMIT קאַמיץ די טראַנסאַקטיאָן און מאכט אַלע מאָדיפיקאַטיאָנס געמאכט צו די דאַטאַבייס שטענדיק;
- ROLLBACK; עס איז מעגלעך צו נוצן ROLLBACK WORK, אָבער די צוויי זענען עקוויוואַלענט.ראָולבאַק ענדס די באַניצער 'ס טראַנסאַקטיאָן און אַנדיז אַלע אַנקאַמטיד מאָדיפיקאַטיאָנס אין פּראָגרעס;
- SAVEPOINT ידענטיפיער; SAVEPOINT אַלאַוז צו שאַפֿן אַ סאַוועפּאָינט אין אַ טראַנסאַקטיאָן, און עס קענען זיין קייפל SAVEPOINT אין אַ טראַנסאַקטיאָן;
- RELEASE SAVEPOINT ידענטיפיער; ויסמעקן אַ סאַוועפּאָינט פון אַ טראַנסאַקטיאָן, ווען עס איז קיין ספּעסיפיעד סאַוועפּאָינט, עקסאַקיוטינג די ויסזאָגונג וועט וואַרפן אַ ויסנעם;
- ROLLBACK TO identifier; זעמל צוריק די טראַנסאַקטיאָן צו די פונט;
- SET TRANSACTION; געניצט צו שטעלן די אפגעזונדערטקייט מדרגה פון די טראַנסאַקטיאָן. די טראַנסאַקטיאָן אפגעזונדערטקייט לעוועלס צוגעשטעלט דורך די InnoDB סטאָרידזש מאָטאָר זענען READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ און SERIALIZABLE.
עס זענען צוויי הויפּט מעטהאָדס פון MYSQL טראַנסאַקטיאָן פּראַסעסינג:
1. ניצן BEGIN, ROLLBACK, COMMIT צו דערגרייכן
- BEGIN אָנהייבן אַ מאַסע - מאַטן
- זעמל צוריק טראַנסאַקטיאָן ראָולבאַק
- יבערגעבן טראַנסאַקטיאָן באַשטעטיקונג
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/ ) שערד "מיסקל דאַטאַבאַסע טראַנסאַקטיאָן ראָולבאַק יזאָלאַטיאָן / עפֿן באַגריף / לעוועל פּראַסעסינג פון פפּ סטייטמאַנץ", וואָס איז נוציק פֿאַר איר.
ברוכים הבאים צו טיילן דעם לינק פון דעם אַרטיקל:https://www.chenweiliang.com/cwl-494.html
ברוכים הבאים צו די טעלעגראַם קאַנאַל פון Chen Weiliang ס בלאָג צו באַקומען די לעצטע דערהייַנטיקונגען!
📚 דער פירער כּולל ריזיק ווערט, 🌟 דאָס איז אַ זעלטן געלעגנהייט, טאָן ניט פעלן עס! ⏰⌛💨
ייַנטיילן און ווי אויב איר ווילט!
דיין ייַנטיילונג און לייקס זענען אונדזער קעסיידערדיק מאָוטאַוויישאַן!