فهرست مقاله
پایگاه داده MySQLبیانیه php انزوا برگشتی تراکنش/مفهوم باز/سطح پردازش
خروجی امور
تراکنش های MySQL عمدتاً برای پردازش داده ها با حجم عملیات زیاد و پیچیدگی بالا استفاده می شود.به عنوان مثال در سیستم مدیریت پرسنل، اگر فردی را حذف می کنید، باید هم اطلاعات اولیه شخص و هم اطلاعات مربوط به آن شخص مانند صندوق پست، مقالات و ... را حذف کنید. به این ترتیب این بیانیه های عملیات پایگاه داده یک معامله را تشکیل می دهد!
- تراکنش ها در MySQL فقط برای پایگاه های داده یا جداولی که از موتور پایگاه داده Innodb استفاده می کنند پشتیبانی می شود.
- پردازش تراکنش را می توان برای حفظ یکپارچگی پایگاه داده استفاده کرد و اطمینان حاصل کرد که دسته ای از دستورات SQL یا همه اجرا می شوند یا هیچ یک از آنها اجرا نمی شوند.
- از تراکنش ها برای مدیریت درج، به روز رسانی، حذف اظهارات استفاده می شود
به طور کلی، معاملات باید دارای 4 شرط (ACID) باشند: اتمی (اتمی)، سازگاری (ثبات)، ایزوله (انزوا)، دوام (قابلیت اطمینان).
- 1،اتمی بودن معاملات:مجموعه ای از معاملات که یا موفق می شوند یا خارج می شوند.
- 2،ثبات:داده های غیرقانونی (محدودیت های کلید خارجی و موارد مشابه) وجود دارد و تراکنش برداشته می شود.
- 3،جداسازی:معاملات به طور مستقل انجام می شود.اگر نتیجه یک معامله بر سایر معاملات تأثیر بگذارد، سایر معاملات برداشته می شوند.100٪ ایزوله تراکنش ها به قیمت سرعت.
- 4،قابلیت اطمینان:پس از خرابی نرم افزار و سخت افزار، درایور جدول داده InnoDB از فایل log برای بازسازی و اصلاح آن استفاده می کند.قابلیت اطمینان و سرعت بالا نمی توانند هر دو را داشته باشند، گزینه innodb_flush_log_at_trx_commit تعیین می کند که چه زمانی تراکنش ها در لاگ ذخیره شوند.
تحت تنظیمات پیشفرض خط فرمان MySQL، تراکنشها بهطور خودکار انجام میشوند، یعنی عملیات COMMIT بلافاصله پس از اجرای دستور SQL اجرا میشود.بنابراین، برای باز کردن صریح تراکنش باید از دستور BEGIN یا START TRANSACTION استفاده کرد یا دستور SET AUTOCOMMIT=0 را اجرا کرد تا استفاده از commit خودکار برای جلسه جاری غیرفعال شود.
بیانیه کنترل تراکنش:
- شروع یا شروع معامله؛ صراحتاً یک تراکنش را شروع کنید.
- COMMIT؛ COMMIT WORK را نیز می توان استفاده کرد، اما این دو معادل هستند. COMMIT تراکنش را انجام می دهد و تمام تغییرات ایجاد شده در پایگاه داده را دائمی می کند.
- ROLLBACK؛ امکان استفاده از ROLLBACK WORK وجود دارد، اما این دو معادل هستند.بازگشت مجدد به تراکنش کاربر پایان میدهد و همه تغییرات غیرمتعهد در حال انجام را لغو میکند.
- شناسه SAVEPOINT؛ SAVEPOINT امکان ایجاد یک Savepoint در یک تراکنش را می دهد و می تواند چندین SAVEPOINT در یک تراکنش وجود داشته باشد.
- RELEASE SAVEPOINT identifier؛ حذف یک savepoint از تراکنش، زمانی که هیچ ذخیره مشخصی وجود ندارد، اجرای عبارت یک استثنا ایجاد می کند.
- ROLLBACK TO identifier؛ بازگرداندن تراکنش به نقطه.
- SET TRANSACTION؛ برای تنظیم سطح جداسازی تراکنش استفاده می شود. موتور ذخیره سازی InnoDB سطوح جداسازی تراکنش های READ UNCOMMITTED، READ COMMITTED، REPEATABLE READ و SERIALIZABLE را فراهم می کند.
دو روش اصلی برای پردازش تراکنش های MYSQL وجود دارد:
1. برای رسیدن به هدف از BEGIN، ROLLBACK، COMMI استفاده کنید
- شروع یک معامله را شروع کنید
- بازگشت بازگشت تراکنش
- مرتکب شدن تایید معامله
2. برای تغییر حالت commit خودکار MySQL مستقیماً از SET استفاده کنید:
- AUTOCOMMIT=0 را تنظیم کنید commit خودکار را غیرفعال کنید
- AUTOCOMMIT=1 را تنظیم کنید Auto-commit را روشن کنید
تست تراکنش
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 Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statement" را به اشتراک گذاشت که برای شما مفید است.
به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-494.html
برای کشف ترفندهای مخفی بیشتر🔑، به کانال تلگرام ما بپیوندید!
اگر دوست داشتید به اشتراک بگذارید و لایک کنید! اشتراک گذاری ها و لایک های شما انگیزه ادامه دار ماست!