İçindekiler
Bir veritabanı içeren herhangi bir uygulama, ACID özelliklerine uygun olmalıdır, uygulamalarda ve profesyonel veritabanı yöneticilerinde ACID kavramı, veritabanlarındaki işlemlerin güvenli ve güvenilir bir şekilde gerçekleştirilmesini garanti eden özelliklere veya özelliklere atıfta bulunur. Özellikle ACID, Atomiklik, Tutarlılık, İzolasyon ve Dayanıklılık anlamına gelir.Bir veritabanı içindeki bir işlem, örneğin, bir kayıt eklemek veya bunu bir iş modeli olarak görüyorsak, Yeni müşteri ekle, Ürünü değiştir. İşlemler her zaman değişiklik, ekleme, değiştirme, silme üretir, sorgu değişiklik üretmediği için işlem değildir.
ASİT özelliklerini belirtme
atomiklik
İşlemin yapılıp yapılmadığını garanti eden ve doğrulayan özelliktir ve bu özellik bir işlemin tamamlanmaması durumunda iptal edildiğini gösterir, örneğin bir kayıt girdiğimizi ve sunucunun çöktüğünü varsayalım, bir kayıt ortada kaydedilir, daha sonra atomiklik nedeniyle bu kayıt kaydedilmeyecektir.
Başka bir örnek, çevrimiçi bir ödeme yapılıyorsa ve tutar hesabımızdan düşülürse, ancak ödeme başarısız olursa veya sistem çökerse, işlem iptal edilir ve veritabanı bunu kaydetmez.
Tutarlılık
Sorunsuz bir şekilde sonuçlanabilecek işlemlerin gerçekleştirileceğini garanti eden özelliktir. Bu kavram, veritabanının bütünlüğü ile ilgilidir. Verilerin değişmesini ve anlam kaybetmesini veya referanssız kalmasını engeller, örneğin bir müşteri herhangi bir zamanda alışveriş yaparken silinemez. Müşteriyi silmek istiyorsanız öncelikle o müşteriye ait tüm faturaları ve verileri silmelisiniz.
İzolasyon
İki veya daha fazla işlemin aynı anda gerçekleşmesi durumunda birbiri ardına gerçekleştirileceğini ve paralel olarak yürütülürse olası hataları önlemek için her birinin diğerinden bağımsız olarak gerçekleştirileceğini garanti eden özelliktir.
dayanıklılık
Elektrik kesintisi veya sistem arızası gibi herhangi bir sorun olması durumunda bile işlemin yapıldığını ve işlem tarafından yapılan değişikliklerin kalıcı olduğunu garanti etmekten sorumlu olan mülktür.
MySQL, tüm MySQL dağıtımlarında standart bir tablo biçimi olarak bulunan, MySQL için bir veri depolama biçimi olan InnoDB biçimini destekler. Bu biçim, ACID tipi işlemleri ve referans bütünlüğünü destekler.
Mysql ile ACID uygulamasının bazı örneklerini yapacağız, sorgular daha sonra herhangi bir programlama dilinde uygulanabilir. Bu veritabanında, her kullanıcı, şirket sisteminde gerçekleştirebilecekleri bir ayrıcalık ve eylem düzeyine sahip olacaktır. Sadece bu işlevselliğe odaklanacağız.
Bir veritabanı oluşturarak başlayacağız ŞirketDB phpmyadmin'den bir kullanıcı tablosu oluşturacağız ve InnoDB depolama motorunu seçeceğiz.
- `users` tablosu için tablo yapısı EĞER YOKSA TABLO OLUŞTURUN users` (`userid` int (10) NOT NULL,` name` varchar (150) DEFAULT NULL) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Kullanıcılar tablosuna bazı veriler ekliyoruz
'users' ('userid', 'name') DEĞERLERİNE EKLE (1, 'Carlos Alberte'), (2, 'Pablo Callejos'), (3, 'Ana Bolena');Bu durumda, userid olacak olan users tablosunun birincil anahtarını oluşturuyoruz.
- `users` ALTER TABLE` users tablosunun dizinleri BİRİNCİL ANAHTAR (`userid`) EKLE;Daha sonra seviye tablosunu oluşturacağız.
- `levels` tablosu için tablo yapısı EĞER VARSA TABLO OLUŞTUR` seviyeler` (`levelid` int (11) NOT NULL,` level` varchar (50) DEFAULT NULL) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = latin1;Seviyeler tablosuna bazı veriler ekliyoruz
'levelid', 'level') DEĞERLERE EKLE (1, 'Temel'), (2, 'Orta'), (3, 'Gelişmiş');Ardından, her kullanıcının izin düzeyini belirteceğimiz ayrıcalıklar tablosunu oluşturuyoruz.
- 'ayrıcalıklar' tablosu için tablo yapısı ayrıcalıklar IF DEĞİLSE TABLO OLUŞTUR ('idprivilege' int (11) NOT NULL, 'idlevel' int (11) NOT NULL DEFAULT '0', 'idusuario' int (11) NOT NULL ) MOTOR = InnoDB AUTO_INCREMENT = 4 VARSAYILAN CHARSET = latin1;Ayrıcalıklar tablosuna bazı veriler ekliyoruz
'ayrıcalıklara' ('ayrıcalık kimliği', 'düzeykimliği','kullanıcı kimliği') DEĞERLERE EKLE (1, 1, 1), (2, 2, 3), (3, 1, 2);Daha sonra SQL editöründen ilişkileri ekliyoruz, kullanıcı kimliği aracılığıyla ayrıcalıklar ve kullanıcılar tablosunu ilişkilendiren bir yabancı anahtar ve düzey kimliği aracılığıyla ayrıcalıkları düzeylerle ilişkilendiren yabancı anahtarı atadım.
- Tablo `ayrıcalıklar` için filtreler TABLO` ayrıcalıkları ALTER ` KISIT EKLE `levellfk` YABANCI ANAHTAR (` levelid`) REFERANSLAR `levels` (` levelid`), KISIT EKLE `privilegesfk` YABANCI ANAHTAR (` kullanıcı kimliği`) REFERANSLAR` kullanıcılar ` (`kullanıcı kimliği`);Ardından, verilerin doğru olup olmadığını görmek için veritabanına danışırız.
Kullanıcılar.ad, düzeyler.düzey FROM kullanıcılar, düzeyler, ayrıcalıklar NEREDE ayrıcalıklar.iddüzey = düzeyler.düzeyid ANDusers.userid = ayrıcalıklar.useridŞimdi nasıl çalıştığını görelim, bir kullanıcıya ve var olmayan seviyeye ayrıcalıklar eklemeye çalışacağız.
İfade aşağıdaki INSERT INTO ayrıcalık DEĞERLERİ olacaktır (ayrıcalık, kullanıcı kimliği, düzey kimliği); Böylece
INSERT INTO ayrıcalık DEĞERLERİ (6, 8,10);Bu bir hata veriyor, çünkü ayrıcalıklar tablosundaki userid'nin yabancı anahtarı, users tablosunda olmayan bir kullanıcı eklersek tutarsızlık yaratacaktır, burada format ile hatayı önlüyoruz. benim Samim veriler sorunsuz bir şekilde kaydedilirdi.
Ardından, users tablosundan bir kullanıcıyı silmeye çalışacağız:
'users' NEREDE kullanıcı kimliği = 3'DEN SİLSQL deyimini çalıştırırken bize hata verecektir, çünkü client silinemez çünkü başka tablolarda datası vardır bu durumda id 3 olan client ayrıcalıklar tablosundadır, silmek istiyorsak önce onu kaldırmalıyız. tüm masalardan ve müşteri masasından sonra.
Bu tür kayıtların yabancı anahtarlarla silinmesi için silme adı verilen kayıt kullanılır. ŞELALE, yabancı anahtar ilişkilerinin olduğu tüm tablolarda belirli bir sorgu ile ilgili tüm kayıtların silineceği . Bu işlemi gerçekleştirmek için işlevi kullanıyoruz DELETE CASCADE'DE.
İlk şey, kademeli olarak silme izni vermek olacaktır, varsayılan olarak başlarken referans tipinin olduğunu unutmayın. KISITLAMAK Bu, tablonun o alanındaki verilerin güncellenemediğini veya silinemeyeceğini belirtir, bu güvenlik nedeniyledir, yürütülen herhangi bir cümle herhangi bir işlem yapamayacaktır, bu nedenle değiştirme ve silme izinlerini değiştiriyoruz.
ALTER TABLE `ayrıcalıklar` KISITLAMA EKLE` ayrıcalıklarıfk` YABANCI ANAHTAR (`userid`) REFERENCES` users` (`userid`) DELETE CASCADE ON GÜNCELLEME KASKADA;SQL sorgusunu tekrar gerçekleştiriyoruz
'users' NEREDE kullanıcı kimliği = 3'DEN SİLArdından, artık herhangi bir tabloda olmadığını doğrulamak için sql sorgusunu gerçekleştirebiliriz:
Kullanıcılar.ad, düzeyler.düzey FROM kullanıcılar, düzeyler, ayrıcalıkları SEÇİNKullanıcı kimliğinin orada bir yabancı anahtarı olduğundan, Kullanıcı 3, users tablosundan ve ayrıcalıklar tablosundan da kaldırıldı.
Bu, Güncellemeler için değişiklik yaparken aynıdır, Mysql'de referans bütünlüğünü ve tablolar arasındaki ilişkiyi korumak için basamaklandırılabilir.
Bakalım zincir ekine yanlış veri eklersek ne olacak, örneğin bir kullanıcı ekliyoruz ama ayrıcalık eklediğimizde yanlış id alıyoruz
Kullanıcıların DEĞERLERİNE EKLE (5, 'Julia Montaña'); INSERT INTO ayrıcalıkları (`privilegeid`,` levelid`, `userid`) DEĞERLER (6, 2, 6);Bu durumda, kullanıcı kaydedilir ancak ayrıcalıkları kaydedilmez çünkü kullanıcılar tablosunda ID 6 yoktur.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.