ಲೇಖನ ಡೈರೆಕ್ಟರಿ
MySQL ಡೇಟಾಬೇಸ್ವಹಿವಾಟು ರೋಲ್ಬ್ಯಾಕ್ ಪ್ರತ್ಯೇಕತೆ/ಮುಕ್ತ ಪರಿಕಲ್ಪನೆ/ಮಟ್ಟದ ಸಂಸ್ಕರಣೆ php ಹೇಳಿಕೆ
MySQL ವ್ಯವಹಾರಗಳು
MySQL ವಹಿವಾಟುಗಳನ್ನು ಮುಖ್ಯವಾಗಿ ಹೆಚ್ಚಿನ ಪ್ರಮಾಣದ ಕಾರ್ಯಾಚರಣೆಗಳು ಮತ್ತು ಹೆಚ್ಚಿನ ಸಂಕೀರ್ಣತೆಯೊಂದಿಗೆ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.ಉದಾಹರಣೆಗೆ, ಸಿಬ್ಬಂದಿ ನಿರ್ವಹಣಾ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ, ನೀವು ಒಬ್ಬ ವ್ಯಕ್ತಿಯನ್ನು ಅಳಿಸಿದರೆ, ನೀವು ವ್ಯಕ್ತಿಯ ಮೂಲ ಮಾಹಿತಿ ಮತ್ತು ವ್ಯಕ್ತಿಗೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿ ಎರಡನ್ನೂ ಅಳಿಸಬೇಕಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ಮೇಲ್ಬಾಕ್ಸ್ಗಳು, ಲೇಖನಗಳು, ಇತ್ಯಾದಿ. ಈ ರೀತಿಯಾಗಿ, ಈ ಡೇಟಾಬೇಸ್ ಕಾರ್ಯಾಚರಣೆ ಹೇಳಿಕೆಗಳು ವ್ಯವಹಾರವನ್ನು ರೂಪಿಸಿ!
- Innodb ಡೇಟಾಬೇಸ್ ಎಂಜಿನ್ ಅನ್ನು ಬಳಸುವ ಡೇಟಾಬೇಸ್ಗಳು ಅಥವಾ ಕೋಷ್ಟಕಗಳಿಗೆ ಮಾತ್ರ MySQL ನಲ್ಲಿ ವಹಿವಾಟುಗಳನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ.
- ಡೇಟಾಬೇಸ್ನ ಸಮಗ್ರತೆಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಲು ವಹಿವಾಟು ಸಂಸ್ಕರಣೆಯನ್ನು ಬಳಸಬಹುದು, SQL ಹೇಳಿಕೆಗಳ ಬ್ಯಾಚ್ಗಳನ್ನು ಎಲ್ಲಾ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆ ಅಥವಾ ಅವುಗಳಲ್ಲಿ ಯಾವುದನ್ನೂ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.
- ಹೇಳಿಕೆಗಳನ್ನು ಸೇರಿಸಲು, ನವೀಕರಿಸಲು, ಅಳಿಸಲು ವಹಿವಾಟುಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ
ಸಾಮಾನ್ಯವಾಗಿ ಹೇಳುವುದಾದರೆ, ವಹಿವಾಟು 4 ಷರತ್ತುಗಳನ್ನು (ACID) ಪೂರೈಸಬೇಕು: ಪರಮಾಣು (ಪರಮಾಣು), ಸ್ಥಿರತೆ (ಸ್ಥಿರತೆ), ಪ್ರತ್ಯೇಕತೆ (ಪ್ರತ್ಯೇಕತೆ), ಬಾಳಿಕೆ (ವಿಶ್ವಾಸಾರ್ಹತೆ)
- 1,ವಹಿವಾಟಿನ ಪರಮಾಣು:ಯಶಸ್ವಿಯಾಗುವ ಅಥವಾ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವ ವಹಿವಾಟುಗಳ ಒಂದು ಸೆಟ್.
- 2,ಸ್ಥಿರತೆ:ಅಕ್ರಮ ಡೇಟಾ ಇದೆ (ವಿದೇಶಿ ಪ್ರಮುಖ ನಿರ್ಬಂಧಗಳು ಮತ್ತು ಹಾಗೆ), ಮತ್ತು ವಹಿವಾಟು ಹಿಂಪಡೆಯಲಾಗಿದೆ.
- 3,ಪ್ರತ್ಯೇಕತೆ:ವಹಿವಾಟುಗಳು ಸ್ವತಂತ್ರವಾಗಿ ನಡೆಯುತ್ತವೆ.ವಹಿವಾಟಿನ ಫಲಿತಾಂಶವು ಇತರ ವಹಿವಾಟಿನ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಿದರೆ, ಇತರ ವಹಿವಾಟುಗಳನ್ನು ಹಿಂಪಡೆಯಲಾಗುತ್ತದೆ.ವೇಗದ ವೆಚ್ಚದಲ್ಲಿ ವಹಿವಾಟುಗಳ 100% ಪ್ರತ್ಯೇಕತೆ.
- 4,ವಿಶ್ವಾಸಾರ್ಹತೆ:ಸಾಫ್ಟ್ವೇರ್ ಮತ್ತು ಹಾರ್ಡ್ವೇರ್ ಕ್ರ್ಯಾಶ್ ನಂತರ, InnoDB ಡೇಟಾ ಟೇಬಲ್ ಡ್ರೈವರ್ ಅದನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ಲಾಗ್ ಫೈಲ್ ಅನ್ನು ಬಳಸುತ್ತದೆ.ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ಹೆಚ್ಚಿನ ವೇಗ ಎರಡನ್ನೂ ಹೊಂದಿರಬಾರದು, innodb_flush_log_at_trx_commit ಆಯ್ಕೆಯು ಲಾಗ್ಗೆ ವಹಿವಾಟುಗಳನ್ನು ಯಾವಾಗ ಉಳಿಸಬೇಕು ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ.
MySQL ಆಜ್ಞಾ ಸಾಲಿನ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳ ಅಡಿಯಲ್ಲಿ, ವಹಿವಾಟುಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬದ್ಧವಾಗಿರುತ್ತವೆ, ಅಂದರೆ, SQL ಹೇಳಿಕೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿದ ನಂತರ COMMIT ಕಾರ್ಯಾಚರಣೆಯನ್ನು ತಕ್ಷಣವೇ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.ಆದ್ದರಿಂದ, ವ್ಯವಹಾರವನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ತೆರೆಯಲು BEGIN ಅಥವಾ START TRANSACTION ಆಜ್ಞೆಯನ್ನು ಬಳಸಬೇಕು ಅಥವಾ ಪ್ರಸ್ತುತ ಸೆಷನ್ಗಾಗಿ ಸ್ವಯಂಚಾಲಿತ ಬದ್ಧತೆಯ ಬಳಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು SET AUTOCOMMIT=0 ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕು.
ವಹಿವಾಟು ನಿಯಂತ್ರಣ ಹೇಳಿಕೆ:
- ವಹಿವಾಟನ್ನು ಪ್ರಾರಂಭಿಸಿ ಅಥವಾ ಪ್ರಾರಂಭಿಸಿ; ವ್ಯವಹಾರವನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪ್ರಾರಂಭಿಸಿ;
- ಕಮಿಟ್; ಕಮಿಟ್ ವರ್ಕ್ ಅನ್ನು ಸಹ ಬಳಸಬಹುದು, ಆದರೆ ಇವೆರಡೂ ಸಮಾನವಾಗಿರುತ್ತದೆ. COMMIT ವ್ಯವಹಾರವನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ಗೆ ಮಾಡಿದ ಎಲ್ಲಾ ಮಾರ್ಪಾಡುಗಳನ್ನು ಶಾಶ್ವತಗೊಳಿಸುತ್ತದೆ;
- ROLLBACK; ROLLBACK ವರ್ಕ್ ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿದೆ, ಆದರೆ ಎರಡು ಸಮಾನವಾಗಿರುತ್ತದೆ.ರೋಲ್ಬ್ಯಾಕ್ ಬಳಕೆದಾರರ ವಹಿವಾಟನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಗತಿಯಲ್ಲಿರುವ ಯಾವುದೇ ಬದ್ಧತೆಯಿಲ್ಲದ ಮಾರ್ಪಾಡುಗಳನ್ನು ರದ್ದುಗೊಳಿಸುತ್ತದೆ;
- SAVEPOINT ಗುರುತಿಸುವಿಕೆ; SAVEPOINT ವಹಿವಾಟಿನಲ್ಲಿ ಸೇವ್ಪಾಯಿಂಟ್ ಅನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ವಹಿವಾಟಿನಲ್ಲಿ ಅನೇಕ ಸೇವ್ಪಾಯಿಂಟ್ಗಳು ಇರಬಹುದು;
- ಸೇವ್ಪಾಯಿಂಟ್ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿ; ವಹಿವಾಟಿನ ಸೇವ್ಪಾಯಿಂಟ್ ಅನ್ನು ಅಳಿಸಿ, ಯಾವುದೇ ನಿರ್ದಿಷ್ಟ ಸೇವ್ಪಾಯಿಂಟ್ ಇಲ್ಲದಿದ್ದಾಗ, ಹೇಳಿಕೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ವಿನಾಯಿತಿಯನ್ನು ಎಸೆಯುತ್ತದೆ;
- ಗುರುತಿಸುವಿಕೆಗೆ ಹಿಂತಿರುಗಿ; ವಹಿವಾಟನ್ನು ಬಿಂದುವಿಗೆ ಹಿಂತಿರುಗಿಸಿ;
- ವಹಿವಾಟು ಹೊಂದಿಸಿ; ವಹಿವಾಟಿನ ಪ್ರತ್ಯೇಕತೆಯ ಮಟ್ಟವನ್ನು ಹೊಂದಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. InnoDB ಸ್ಟೋರೇಜ್ ಇಂಜಿನ್ ರೀಡ್ ಅನ್ಕಮಿಟೆಡ್, ರೀಡ್ ಕಮಿಟ್ಡ್, ರಿಪೀಟಬಲ್ ರೀಡ್ ಮತ್ತು ಸೀರಿಯಾಲೈಸಬಲ್ ವಹಿವಾಟಿನ ಪ್ರತ್ಯೇಕತೆಯ ಮಟ್ಟವನ್ನು ಒದಗಿಸುತ್ತದೆ.
MYSQL ವಹಿವಾಟು ಪ್ರಕ್ರಿಯೆಗೆ ಎರಡು ಮುಖ್ಯ ವಿಧಾನಗಳಿವೆ:
1. ಸಾಧಿಸಲು BEGIN, ROLLBACK, 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); ?>
ಹೋಪ್ ಚೆನ್ ವೈಲಿಯಾಂಗ್ ಬ್ಲಾಗ್ ( https://www.chenweiliang.com/ ) "MySQL ಡೇಟಾಬೇಸ್ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ರೋಲ್ಬ್ಯಾಕ್ ಐಸೋಲೇಶನ್/ಓಪನ್ ಕಾನ್ಸೆಪ್ಟ್/ಪಿಎಚ್ಪಿ ಸ್ಟೇಟ್ಮೆಂಟ್ಗಳ ಮಟ್ಟದ ಪ್ರಕ್ರಿಯೆ" ಅನ್ನು ಹಂಚಿಕೊಂಡಿದೆ, ಇದು ನಿಮಗೆ ಸಹಾಯಕವಾಗಿದೆ.
ಈ ಲೇಖನದ ಲಿಂಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸ್ವಾಗತ:https://www.chenweiliang.com/cwl-494.html
ಇತ್ತೀಚಿನ ನವೀಕರಣಗಳನ್ನು ಪಡೆಯಲು ಚೆನ್ ವೈಲಿಯಾಂಗ್ ಅವರ ಬ್ಲಾಗ್ನ ಟೆಲಿಗ್ರಾಮ್ ಚಾನಲ್ಗೆ ಸುಸ್ವಾಗತ!
📚 ಈ ಮಾರ್ಗದರ್ಶಿಯು ದೊಡ್ಡ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿದೆ, 🌟ಇದು ಅಪರೂಪದ ಅವಕಾಶವಾಗಿದೆ, ಇದನ್ನು ತಪ್ಪಿಸಿಕೊಳ್ಳಬೇಡಿ! ⏰⌛💨
ಇಷ್ಟವಾದಲ್ಲಿ ಶೇರ್ ಮಾಡಿ ಮತ್ತು ಲೈಕ್ ಮಾಡಿ!
ನಿಮ್ಮ ಹಂಚಿಕೆ ಮತ್ತು ಇಷ್ಟಗಳು ನಮ್ಮ ನಿರಂತರ ಪ್ರೇರಣೆ!