Bir MySQL veritabanı kilitlenmesi yani sadece bir kişi bir seferde sorgu çalıştırabilirsiniz?

4 Cevap php

Insanlar bir MySQL veritabanı erişmeye çalıştığınız ve aynı bilgilerle tabloları güncellemek için çalışırken ben bir kaç sorunlar yaşıyorum.

Ben PHP ile yazılmış bir web sayfası var. Bu sitedeki bazı veriler veritabanına girildi olmadığını kontrol etmek için bir sorgu. Veri değil varsa, o zaman ben bunu eklemek için devam edin. Sorun iki kişi aynı anda çalışırsanız, onay veriler henüz girilmemiş ancak ekleme gerçekleşir zaman başka kişi tarafından olmuştur söyleyebilir.

Bu senaryo işlemek için en iyi yolu nedir? Ben ancak o zaman ilk anothers benim sorguları işlemek için veri tabanı kilidi miyim?

4 Cevap

Sen LOCK arıyoruz.

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

Bu gibi çalıştırılabilir basit bir mysql_query (veya MySQLi::query/prepare).

Hiçbir şey okunması mümkün olacak gibi - ben değil tüm veritabanının daha kilitli olması gerekir ki (muhtemelen LOCK TABLES * deneyebilirsiniz rağmen) belirli tabloları kilitlemek için daha iyi olduğunu söyleyebilirim. Senin gibi bir şey arıyoruz düşünüyorum:

LOCK TABLES items;
START TRANSACTION;
INSERT INTO items (name, label) VALUES ('foo', 'bar');
UNLOCK TABLES;

Veya PHP:

mysql_query('LOCK TABLES items');
mysql_query("INSERT INTO items (name, label) VALUES ('foo', 'bar')");
mysql_query('UNLOCK TABLES');

Kadar okuyun database transactions. Bu muhtemelen LOCK TABLOLAR çalışan daha ne gerek işlemek için daha iyi bir yolu var.

Elle tabloların kilitlenmesine kötü hiç yapabileceğini düşünüyorum. (Vb, PHP başarısız olduğundan, ya da kullanıcı bir sonraki bir sonraki adımı tıkladığında, uzak PC'den yürür) onları açmak için kod çalışır asla ne olur.

Tek bir web uygulaması bu en aza indirmek için bir yol ve bir yaygın hata Devs, satır başına veya tüm tablo üzerinde bir tasarruf düğmesi ile, düzenlemek için veri metin kutuları bir datagrid dolu olmasıdır yok. Kişi Cuma günü bu açılır ve Pazartesi geri gelirse Açıkçası, veri yanlış olabilir ve onlar yeni verilerin üzerine tasarruf olabilir. Bunu düzeltmek için kolay bir yolu yerine her satırda EDIT düğmeleri sahip olmaktır, ve düğmeyi tıklatarak bir düzenleme formu, onlar umarım taze veri yükleme ve bir seferde sadece 1 satır değişikliğini sunabilirsiniz bu şekilde yükler.

Ama daha da önemlisi, gizli bir giriş kutusu gibi bir datetime alanı dahil gerektiğini ve onlar tarihte veri bakmak göndermek ve veri ne kadar eski karar ve kaç yaşında çok eski bir karar ve uyarmak veya inkar çalıştığınızda kendi eylem hakkında kullanıcı.

Eğer bir şey, düzenlemeden önce veriler değiştirildi olmadığını kontrol edebilir. Diğer kişinin düzenlemeyi yapıyor iken birisi verileri düzenlenmiş, bu durumda, onun hakkında bilgi verilecektir.

Tür stackoverflow gibi yorumlama yönetir.