מדריך מאמרים
מסד נתונים של 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 בעסקה;
- מזהה RELEASE SAVEPOINT; מחיקת נקודת שמירה של טרנזקציה, כאשר אין נקודת שמירה מוגדרת, ביצוע ההצהרה יזרוק חריג;
- ROLLBACK TO מזהה; החזר את העסקה לנקודה;
- SET TRANSACTION; משמש להגדרת רמת הבידוד של העסקה. רמות בידוד העסקאות שמספק מנוע האחסון InnoDB הן READ UNCOMMITTED, READ COMMITTED, READBLE READ ו-SERIALIZABLE.
ישנן שתי שיטות עיקריות לעיבוד עסקאות MYSQL:
1. השתמש ב-BEGIN, ROLLBACK, COMMIT כדי להשיג
- התחל להתחיל עסקה
- גלגל לאחור ביטול עסקה לאחור
- קומיט אישור עסקה
2. השתמש ב-SET ישירות כדי לשנות את מצב ההתחייבות האוטומטית של MySQL:
- הגדר AUTOCOMMIT=0 השבת התחייבות אוטומטית
- הגדר AUTOCOMMIT=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); ?>
Hope Chen Weiliang בלוג ( https://www.chenweiliang.com/ ) שיתף את "בידוד טרנזקציות מסד נתונים של MySQL/Isolation Open Concept/Level Processing of PHP Statements", וזה מועיל לך.
מוזמנים לשתף את הקישור של מאמר זה:https://www.chenweiliang.com/cwl-494.html
ברוכים הבאים לערוץ הטלגרם של הבלוג של Chen Weiliang כדי לקבל את העדכונים האחרונים!
📚 המדריך הזה מכיל ערך עצום, 🌟זו הזדמנות נדירה, אל תפספסו אותה! ⏰⌛💨
שתפו ותעשו לייק אם בא לכם!
השיתוף והלייקים שלך הם המוטיבציה המתמשכת שלנו!