Makale Rehberi
MySQL veritabanıİşlem geri alma izolasyonu/açık konsept/seviye işleme php deyimi
MySQL İşler
MySQL işlemleri esas olarak büyük miktarda işlem ve yüksek karmaşıklık içeren verileri işlemek için kullanılır.Örneğin personel yönetim sisteminde bir kişiyi silerseniz hem kişinin temel bilgilerini hem de kişiyle ilgili posta kutuları, makaleler vb. bilgileri silmeniz gerekir. bir işlem oluşturur!
- İşlemler MySQL'de yalnızca Innodb veritabanı motorunu kullanan veritabanları veya tablolar için desteklenir.
- İşlem işleme, veritabanının bütünlüğünü korumak için kullanılabilir ve SQL deyimlerinin toplu işlerinin ya hepsinin yürütülmesini ya da hiçbirinin yürütülmemesini sağlar.
- İşlemler, ekleme, güncelleme, silme ifadelerini yönetmek için kullanılır
Genel olarak konuşursak, bir işlemin 4 koşulu (ACID) karşılaması gerekir: Atomiklik (atomiklik), Tutarlılık (kararlılık), İzolasyon (izolasyon), Dayanıklılık (güvenilirlik)
- 1,İşlemlerin atomitesi:Başarılı veya geri çekilen bir dizi işlem.
- 2,istikrar:Yasadışı veriler var (yabancı anahtar kısıtlamaları ve benzerleri) ve işlem geri çekildi.
- 3,İzolasyon:İşlemler bağımsız olarak çalışır.Bir işlemin sonucu diğer işlemleri etkiliyorsa, diğer işlemler geri çekilecektir.Hız pahasına işlemlerin %100 izolasyonu.
- 4,güvenilirlik:Yazılım ve donanım çökmesinden sonra InnoDB veri tablosu sürücüsü, günlük dosyasını yeniden oluşturmak ve değiştirmek için kullanır.Güvenilirlik ve yüksek hız her ikisine birden sahip olamaz, innodb_flush_log_at_trx_commit seçeneği, işlemlerin ne zaman günlüğe kaydedileceğini belirler.
MySQL komut satırının varsayılan ayarları altında, işlemler otomatik olarak yapılır, yani COMMIT işlemi, SQL deyimi yürütüldükten hemen sonra yürütülür.Bu nedenle, bir işlemi açıkça açmak için BEGIN veya START TRANSACTION komutunu kullanmanız veya geçerli oturum için otomatik kesinleştirme kullanımını devre dışı bırakmak için SET AUTOCOMMIT=0 komutunu çalıştırmanız gerekir.
İşlem kontrol beyanı:
- İŞLEMİ BAŞLATIN veya BAŞLATIN; açıkça bir işlem başlatın;
- COMMIT; COMMIT WORK da kullanılabilir, ancak ikisi eşdeğerdir. COMMIT işlemi taahhüt eder ve veritabanında yapılan tüm değişiklikleri kalıcı hale getirir;
- ROLLBACK; ROLLBACK WORK kullanmak mümkündür ancak ikisi eşdeğerdir.Geri alma, kullanıcının işlemini sonlandırır ve devam etmekte olan tüm taahhüt edilmemiş değişiklikleri geri alır;
- SAVEPOINT tanımlayıcısı SAVEPOINT, bir işlemde bir kayıt noktası oluşturmaya izin verir ve bir işlemde birden fazla SAVEPOINT olabilir;
- RELEASE SAVEPOINT tanımlayıcısı, belirtilen bir kayıt noktası olmadığında, bir işlemin kayıt noktasını silin, ifadeyi yürütmek bir istisna atar;
- ROLLBACK TO tanımlayıcısı, işlemi noktaya geri alın;
- SET TRANSACTION; işlemin izolasyon seviyesini ayarlamak için kullanılır. InnoDB depolama motoru tarafından sağlanan işlem izolasyon seviyeleri, READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ ve SERIALIZABLE'dır.
MYSQL işlem işlemenin iki ana yöntemi vardır:
1. Başarıya ulaşmak için BEGIN, ROLLBACK, COMMIT kullanın
- BAŞLA bir işlem başlatmak
- GERİ DÖNÜŞ işlem geri alma
- KOMİTE İşlem onayı
2. MySQL'in otomatik taahhüt modunu değiştirmek için doğrudan SET'i kullanın:
- AUTOCOMMIT SET=0 Otomatik tamamlamayı devre dışı bırak
- AUTOCOMMIT SET=1 Otomatik tamamlamayı aç
işlem testi
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'de İşlem Örneklerini Kullanma
MySQL SİPARİŞ TARAFINDAN test:
<?
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);
?>Umut Chen Weiliang Blogu ( https://www.chenweiliang.com/ ) size yardımcı olacak "MySQL Veritabanı İşlem Geri Alma Yalıtımı/Açık Konsept/PHP İfadelerinin Düzeyinde İşleme" paylaştı.
Bu makalenin bağlantısını paylaşmaya hoş geldiniz:https://www.chenweiliang.com/cwl-494.html
Daha fazla gizli numarayı keşfetmek için🔑 Telegram kanalımıza katılmaya hoş geldiniz!
Beğendiyseniz paylaşın ve beğenin! Paylaşımlarınız ve beğenileriniz bizim sürekli motivasyonumuzdur!