લેખ ડિરેક્ટરી
MySQL ડેટાબેઝટ્રાન્ઝેક્શન રોલબેક આઇસોલેશન/ઓપન કોન્સેપ્ટ/લેવલ પ્રોસેસિંગ php સ્ટેટમેન્ટ
MySQL બાબતો
MySQL ટ્રાન્ઝેક્શન્સનો ઉપયોગ મુખ્યત્વે મોટી સંખ્યામાં કામગીરી અને ઉચ્ચ જટિલતા સાથે ડેટા પર પ્રક્રિયા કરવા માટે થાય છે.ઉદાહરણ તરીકે, પર્સનલ મેનેજમેન્ટ સિસ્ટમમાં, જો તમે કોઈ વ્યક્તિને ડિલીટ કરો છો, તો તમારે તે વ્યક્તિની મૂળભૂત માહિતી અને વ્યક્તિ સંબંધિત માહિતી, જેમ કે મેઈલબોક્સ, લેખ વગેરે બંનેને કાઢી નાખવાની જરૂર છે. આ રીતે, આ ડેટાબેઝ ઓપરેશન સ્ટેટમેન્ટ એક વ્યવહાર રચે છે!
- ટ્રાન્ઝેક્શન્સ MySQL માં ફક્ત ડેટાબેસેસ અથવા કોષ્ટકો માટે સમર્થિત છે જે Innodb ડેટાબેઝ એન્જિનનો ઉપયોગ કરે છે.
- ટ્રાન્ઝેક્શન પ્રોસેસિંગનો ઉપયોગ ડેટાબેઝની અખંડિતતા જાળવવા માટે કરી શકાય છે, ખાતરી કરીને કે SQL સ્ટેટમેન્ટના બેચ કાં તો બધા એક્ઝિક્યુટ થયા છે અથવા તેમાંથી કોઈ એક્ઝિક્યુટ થયું નથી.
- ટ્રાન્ઝેક્શનનો ઉપયોગ ઇન્સર્ટ, અપડેટ, ડિલીટ સ્ટેટમેન્ટ મેનેજ કરવા માટે થાય છે
સામાન્ય રીતે કહીએ તો, વ્યવહારે 4 શરતો (ACID) ને પૂર્ણ કરવી આવશ્યક છે: અણુ (પરમાણુતા), સુસંગતતા (સ્થિરતા), અલગતા (અલગતા), ટકાઉપણું (વિશ્વસનીયતા)
- 1,વ્યવહારોની પરમાણુતા:વ્યવહારોનો સમૂહ જે કાં તો સફળ થાય છે અથવા પાછો ખેંચે છે.
- 2,સ્થિરતાત્યાં ગેરકાયદે ડેટા છે (વિદેશી કી અવરોધો અને તેના જેવા), અને વ્યવહાર પાછો ખેંચી લેવામાં આવે છે.
- 3,અલગતા:વ્યવહારો સ્વતંત્ર રીતે ચાલે છે.જો કોઈ વ્યવહારનું પરિણામ અન્ય વ્યવહારોને અસર કરે છે, તો અન્ય વ્યવહારો પાછા ખેંચી લેવામાં આવશે.ઝડપના ખર્ચે વ્યવહારોનું 100% અલગતા.
- 4,વિશ્વસનીયતા:સૉફ્ટવેર અને હાર્ડવેર ક્રેશ થયા પછી, InnoDB ડેટા ટેબલ ડ્રાઇવર લોગ ફાઇલનો ઉપયોગ તેને પુનઃનિર્માણ અને સંશોધિત કરવા માટે કરશે.વિશ્વસનીયતા અને હાઇ સ્પીડ બંને હોઈ શકતા નથી, innodb_flush_log_at_trx_commit વિકલ્પ નક્કી કરે છે કે લોગમાં વ્યવહારો ક્યારે સાચવવા.
MySQL કમાન્ડ લાઇનની ડિફૉલ્ટ સેટિંગ્સ હેઠળ, વ્યવહારો આપમેળે પ્રતિબદ્ધ થાય છે, એટલે કે, એસક્યુએલ સ્ટેટમેન્ટ એક્ઝિક્યુટ થયા પછી તરત જ COMMIT ઑપરેશન એક્ઝિક્યુટ કરવામાં આવશે.તેથી, ટ્રાન્ઝેક્શનને સ્પષ્ટ રીતે ખોલવા માટે BEGIN અથવા START TRANSACTION આદેશનો ઉપયોગ કરવો જોઈએ અથવા વર્તમાન સત્ર માટે સ્વચાલિત કમિટના ઉપયોગને અક્ષમ કરવા માટે SET AUTOCOMMIT=0 આદેશનો અમલ કરવો જોઈએ.
વ્યવહાર નિયંત્રણ નિવેદન:
- વ્યવહાર શરૂ કરો અથવા શરૂ કરો; સ્પષ્ટપણે વ્યવહાર શરૂ કરો;
- COMMIT; COMMIT WORK નો પણ ઉપયોગ કરી શકાય છે, પરંતુ બે સમાન છે. COMMIT ટ્રાન્ઝેક્શન કરે છે અને ડેટાબેઝમાં કરવામાં આવેલા તમામ ફેરફારોને કાયમી બનાવે છે;
- રોલબેક; રોલબેક વર્કનો ઉપયોગ કરવો શક્ય છે, પરંતુ બંને સમાન છે.રોલબેક વપરાશકર્તાના વ્યવહારને સમાપ્ત કરે છે અને પ્રગતિમાં રહેલા તમામ અપ્રતિબદ્ધ ફેરફારોને પૂર્વવત્ કરે છે;
- SAVEPOINT ઓળખકર્તા; SAVEPOINT ટ્રાન્ઝેક્શનમાં સેવપોઇન્ટ બનાવવાની મંજૂરી આપે છે, અને વ્યવહારમાં બહુવિધ SAVEPOINT હોઈ શકે છે;
- સેવપોઈન્ટ ઓળખકર્તાને રીલીઝ કરો; ટ્રાન્ઝેક્શનના સેવપોઈન્ટને કાઢી નાખો, જ્યારે કોઈ ઉલ્લેખિત સેવપોઈન્ટ ન હોય, ત્યારે સ્ટેટમેન્ટનો અમલ કરવાથી અપવાદ થશે;
- ઓળખકર્તા પર રોલબેક કરો; ટ્રાન્ઝેક્શનને પોઈન્ટ પર રોલ બેક કરો;
- સેટ ટ્રાન્ઝેક્શન; વ્યવહારના અલગતા સ્તરને સેટ કરવા માટે વપરાય છે. InnoDB સ્ટોરેજ એન્જિન READ UNCOMMITTED, READ COMMITTED, REPEATable READ અને SERIALIZABLE ના ટ્રાન્ઝેક્શન આઇસોલેશન લેવલ પ્રદાન કરે છે.
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 ડેટાબેઝ ટ્રાન્ઝેક્શન રોલબેક આઇસોલેશન/ઓપન કન્સેપ્ટ/લેવલ પ્રોસેસિંગ ઓફ PHP સ્ટેટમેન્ટ" શેર કર્યું છે, જે તમને મદદરૂપ છે.
આ લેખની લિંક શેર કરવા માટે આપનું સ્વાગત છે:https://www.chenweiliang.com/cwl-494.html
વધુ છુપાયેલા યુક્તિઓ🔑 અનલૉક કરવા માટે, અમારી ટેલિગ્રામ ચેનલમાં જોડાવા માટે આપનું સ્વાગત છે!
ગમે તો શેર કરો અને લાઈક કરો! તમારા શેર અને લાઈક્સ એ અમારી સતત પ્રેરણા છે!