სტატიების დირექტორია
MySQL მონაცემთა ბაზატრანზაქციის rollback იზოლაცია/ღია კონცეფცია/დონის დამუშავების 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 მისაღწევად
- დასაწყისი გარიგების დაწყება
- უკან დაბრუნება ტრანზაქციის დაბრუნება
- კომიტეტი გარიგების დადასტურება
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 ტესტირება:
<? 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 მონაცემთა ბაზის ტრანზაქციის უკან დაბრუნება იზოლაცია/ღია კონცეფცია/PHP განცხადებების დონის დამუშავება", რომელიც თქვენთვის სასარგებლოა.
კეთილი იყოს თქვენი მობრძანება ამ სტატიის ბმულის გასაზიარებლად:https://www.chenweiliang.com/cwl-494.html
კეთილი იყოს თქვენი მობრძანება Chen Weiliang-ის ბლოგის ტელეგრამის არხზე, რომ მიიღოთ უახლესი განახლებები!
📚 ეს სახელმძღვანელო შეიცავს უზარმაზარ ღირებულებას, 🌟ეს იშვიათი შესაძლებლობაა, არ გამოტოვოთ! ⏰⌛💨
გააზიარეთ და მოიწონეთ თუ მოგეწონათ!
თქვენი გაზიარება და მოწონებები ჩვენი უწყვეტი მოტივაციაა!