Mysql baska tabloda kaydi olmayan kayitlari silmek

Veritabanınızdan zaman zaman aktif olmayan kişileri, hiç bir işe yaramayan verileri silmek istiyor olabilirsiniz. Bu noktada konuyu bir örnek ile açıklayacağım ;

Diyelim ki bir üyeler, bir de yorumlar tablomuz olsun. Yorumu olmayan üyeleri silmek isteyen bir query yazmak istiyoruz diyelim. Bu durumda aşağıdaki query ile bu işi yapabiliyoruz.
Subquery ile yorumları çekip bunları NOT EXIST ile denetliyoruz. Sonuç tam da istediğimiz gibi.

SELECT u.uye_id FROM `uyeler` u WHERE NOT EXISTS (SELECT yorum_id FROM yorumlar y WHERE y.uye_id = u.uye_id)

Çok fazla detaya girmeden anlattım, anlamayan olursa tabi ki detaylıca yardım edebilirim.

Umarım işinize yarayacaktır.

Mysql Tekrar Eden Verilerin Hepsini Listelemek

Tekrar eden (duplicate) verileri bulmak için bu yazımızı okuyabilirsiniz. Ancak bu verilerin hepsini bir şekilde düzenlemeniz gerekirse, sizden bunların listesi istenecektir.

Aşağıdaki Query ile, list tablosundaki aynı email kaydına sahip (aynı email’in en az 2 kişide olması durumu) customer_id leri ve emailleri , emaile göre sıralayarak listeyelen bir sorgu bulunmaktadır.

SELECT list.email, list.customer_id
FROM list
INNER JOIN (
  SELECT email
  FROM list
  GROUP BY email
  HAVING COUNT( customer_id ) >1
) duplicate ON list.email = duplicate.email
ORDER BY list.email ASC

Umarım işinize yarar.

MySQL Tekrar Eden Verileri Bulmak

Merhaba,

Binlerce satır verinizin bulunduğu bir tabloda birbiri ile aynı olan satırları bulmanız gerekebilir. Bunun için aşağıya yazacağım SQL cümleciğini kendinize göre düzenleyerek çalıştırabilirsiniz.

SELECT column FROM table GROUP BY reference_column HAVING COUNT( * ) >1

column : buraya görüntülemek istediğiniz sutunları yazabilirsiniz veya tümü için * yazabilirsiniz.

table : işlem yapmak istediğiniz tabloyu yazınız

reference_column : aynı verilerin olup olmadığının kontrol edileceği sütun.

 

Umarım işinize yarar.

 

 

percona server nedir

Percona, Mysql ve InnoDb performansında uzman

Perconaserver, Percona firması tarafından geliştirilen bir mysql uyarlamasıdır. Mysql’i daha performanslı hale getirip ölçeklendirilmesini ve monitör edilmesini de basitleştirir.
perconaserver ile, mysql kullanımınız hiç değişmez. Ancak bu kişiler innodb ve mysql konusunda gerçekten uzman kişiler. Açık kaynak olarak verdikleri bu ürün ile birlikte dilerseniz paralı destek ve hizmet alabiliyorsunuz. Tabi belirtmeliyim ki ben orta – büyük ölçekli bir işte kullanmama rağmen paralı destek almadan işlerimi yoluna koyabildim.
Sitelerinde de belirttikleri gibi, tüm yazılımları açık kaynak ve ücretsizdir.
Daha sonraki yazılarda, percona serverin kurulması vb konulara da değineceğim.
Şimdilik görüşmek üzere.

mysql insert delayed

insert delayed komutu, bir tablo üzerinde aynı anda fazla işlem yaptığımız zaman işimize yarayabilir.

Yaptığı işlem, gelen insert sorgularını bir process olarak tutmak, ve en uygun olan zamanda tabloya insert etmek.
İlk olarak, insert delayed nedir ne değildir ondan bahsedelim.

insert delayed çalıştığı zaman, geriye sorgunun çalıştığına dair yanıt döndürür ama veriler eklenmek üzere bekletilir.

insert delayed komutu, insert komutundan daha yavaş çalışmaktadır. Sebebi, insert kullandığımız zaman direk tabloya etki etmemiz, insert delayed kullandığımızda ise bir süre bekletilmemizdir. O yüzden insert delayed komutunu sadece gerçekten ihtiyacımız varsa kullanmalıyız.

Birden fazla insert işleminde, insert delayed kullanıldığı zaman, bunlar tek bir işlem olarak tutulur ve birlikte insert edilir. Yani bir sürü insert sorgusunun çalışmasındansa sadece 1 kere insert işlemi yapılır.
insert delayed ile insert etmek istediğimiz verileri, veriler tabloya insert edilmeden önce select komutu kullandığımızda göremeyiz.

lock tables komutu kullanıldıktan sonra insert delayed komutu kullanıldığında hataya yol açar, sebebi ise, kilitlenmiş tabloya bir işlem yaptıramayışımız. Yani biz tabloyu kilitlersek, ona bir işlem ekleyemeyiz. insert delayed, tablo için ayrı bir processtir.

insert delayed komutu, yalnızca MyISAM, MEMORY ve ARCHIVE tablolarda çalışır.

insert …. select ve insert …. on duplicate key gibi sorgularda delayed iş görmez, yok sayılır. Sebebi ise, insert delayed sorgusunun hemen yanıt verip ama işlemi process olarak tutması.

Insert işlemi gerçekleşmeden last_inserd_id() kullanırsak hataya yol açar.

mysql’de show status komutunu çalıştırdığımızda aşağıda verdiğim parametreler insert delayed işlemi ile ilgilidir, gerekli durumlarda takip edilebilir.

Delayed_insert_threads : gelen INSERT DELAYED sayısı
Delayed_writes : INSERT DELAYED ile yazılmış satır sayısı
Not_flushed_delayed_rows : Yazılmak için bekletilen satır sayısı

Peki insert delayed komutu verileri tabloya ne zaman ekler?

Bu noktada önemli olan parametrelerden 2 tanesi delayed_insert_timeout ve delayed_insert_limit. insert delayed komutu çalıştırıldığı zaman, ilk olarak daha önceden bekletilen işlem olup olmadığına bakılır. Eğer varsa bu iki işlem birleştirilir. Ardından da bu iki parametreye bakılır. Eğer delayed_insert_limit sayısına ulaşılmışsa, veya delayed_insert_timeout vakti gelmişse, veriler veritabanına insert edilir 🙂 Diğer türlü de bu sorgular process olarak tutulmaya devam edilir.

Bu parametreleri de mysqld ile değiştirebiliriz nasıl olduklarına buradan ve buradan bakabilirsiniz.

Sorgunun kullanımı ise INSERT INTO ile aynıdır, DELAYED bu iki kelime arasına gelir; INSERT DELAYED INTO

 

Daha detaylı bilgi için buraya göz atabilirsiniz.