ලිපි නාමාවලිය
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; COMMIT WORK ද භාවිතා කළ හැක, නමුත් දෙක සමාන වේ. COMMIT ගනුදෙනුව සිදු කරන අතර දත්ත සමුදායේ සිදු කරන ලද සියලුම වෙනස් කිරීම් ස්ථිර කරයි;
- ROLLBACK; ROLLBACK WORK භාවිතා කළ හැකිය, නමුත් දෙකම සමාන වේ.ආපසු හැරවීම පරිශීලකයාගේ ගනුදෙනුව අවසන් කරන අතර සිදුවෙමින් පවතින සියලුම කැප නොකළ වෙනස් කිරීම් අවලංගු කරයි;
- SAVEPOINT හැඳුනුම්කාරකය; SAVEPOINT ගණුදෙනුවක ඉතිරි කිරීමේ ලක්ෂ්යයක් නිර්මාණය කිරීමට ඉඩ සලසයි, සහ ගනුදෙනුවක ඉතිරි කිරීම් කිහිපයක් තිබිය හැක;
- ඉතිරිකිරීමේ හැඳුනුම්කාරකය මුදාහරින්න; ගනුදෙනුවක සුරැකුම් ලක්ෂ්යයක් මකා දමන්න, නිශ්චිත සුරැකුම් ලක්ෂ්යයක් නොමැති විට, ප්රකාශය ක්රියාත්මක කිරීම ව්යතිරේකයක් ඇති කරයි;
- හැඳුනුම්කාරකය වෙත ආපසු යන්න; ගනුදෙනුව ලක්ෂ්යයට ආපසු හරවන්න;
- ගනුදෙනුව සකසන්න; ගනුදෙනුවේ හුදකලා මට්ටම සැකසීමට භාවිතා කරයි. InnoDB ආචයන එන්ජිම මඟින් සපයනු ලබන ගනුදෙනු හුදකලා මට්ටම් වන්නේ READ Uncommitted, READ COMMITTED, Repeatable Read, සහ SRILIZABLE ය.
MYSQL ගනුදෙනු සැකසීමේ ප්රධාන ක්රම දෙකක් තිබේ:
1. සාක්ෂාත් කර ගැනීම සඳහා BEGIN, ROLLBACK, COMMIT භාවිතා කරන්න
- ආරම්භය ගනුදෙනුවක් ආරම්භ කරන්න
- රෝල්බැක් ගනුදෙනු ආපසු හැරීම
- COMMIT ගනුදෙනු තහවුරු කිරීම
2. MySQL හි ස්වයංක්රීය ප්රකාරය වෙනස් කිරීමට SET සෘජුවම භාවිතා කරන්න:
- සකසන්න 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 ඇණවුම:
<?
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 Database Transaction Rollback Isolation/Open Concept/Processing Level Processing of PHP Statements" බෙදාගෙන ඇත, එය ඔබට ප්රයෝජනවත් වේ.
මෙම ලිපියේ සබැඳිය බෙදා ගැනීමට සාදරයෙන් පිළිගනිමු:https://www.chenweiliang.com/cwl-494.html
තවත් සැඟවුණු උපක්රම අගුළු ඇරීමට🔑, අපගේ ටෙලිග්රාම් නාලිකාවට සම්බන්ධ වීමට සාදරයෙන් පිළිගනිමු!
ඔබ එයට කැමති නම් Share කර Like කරන්න! ඔබගේ කොටස් සහ කැමැත්ත අපගේ අඛණ්ඩ අභිප්රේරණයයි!