mysql’deki tablonun olup olmadığını kontrol etmek (php kullanarak)

Php ile çalışırken, mysql’de kullandığımız veritabanı içerisinde, herhangi bir isimdeki tablonun var olup olmadığını kontrol etmenin bir kaç yolu vardır. Bu yazıda onlardan bahsedeceğim.

Bunlardan ilki, SHOW TABLES querysini kullanmaktır.

Örneğin, test isminde bir veritabanımız olsun. İçerisindeki tabloların ismi de, admin, member, log, test1, test2 olsun. Yani mysql’e konsoldan bağlanıp use test dedikten sonra, show tables dediğimizde karşımıza şu çıksın.

+------------------------+         |
| admin                  |
| member                 |
| log                    |
| test1                  |
| test2                  | 
+------------------------+

Şimdi işin Php kısmına geçelim.

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SHOW TABLES FROM test" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $row = array(); while ( $row = mysql_fetch_row( $result ) ) { echo "Tablo ismi : ".$row[0]."
"; } } mysql_free_result( $result );

SHOW TABLES FROM test querysinin ardından, LIKE parametresi ekleyerek, sonucu daraltabiliriz. Ardından da sonuçları php ile parse ederek, aradığımız isimdeki tablonun olup olmadığını kontrol edebiliriz. (SHOW TABLES FROM test LIKE ‘%min%’ gibi)

İkinci yöntemimiz ise, mysql’deki information_schema databasei içerisindeki TABLES tablosundaki bilgiler. Bu tabloda TABLE_SCHEMA sütununda veritabanı isimleri TABLE_NAME sütununda ise tablo isimleri yer almaktadır.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{database ismi}’ AND table_name = ‘{tablo ismi}’ şeklinde çalıştıracağımız sorgudan gelen sonuç ile istediğimizi elde etmiş olacağız. Yapalım;

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='test' AND table_name='test1'" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $count = mysql_num_rows($result); if($count == 1){ // tablo var, gerekli işlemler } else { // tablo yok, gerekli işlemler } } mysql_free_result( $result );

uzun süre calisan mysql processleri oldurmek

Sunucunuzda bazı durumlarda, mysql veritabanınızda işlemler yığılmaya başlıyor olabilir.

Bu durum için bir arkadaşımın yazmış olduğu basit bir php scripti mevcut. Dilerseniz işinizi kolaylaştırabilir.

Script, verdiğiniz süreden daha büyük süre değerine sahip mysql processleri yakalayıp, bunları KILL ediyor (öldürüyor).
* kullanıcı adı kısmına root, root şifresi yazan kısma da root şifrenizi yazarak çalıştırabilirsiniz.

 

<?
var_dump(mysql_connect("localhost", "{kullanici_adi}", "{root_sifresi}"));
$result = mysql_query("SHOW FULL PROCESSLIST");
$i=0;
while ($row=mysql_fetch_array($result)) {
  $process_id=$row["Id"];
  if ($row["Time"] > 5000 ) {
    $sql="KILL $process_id";
    $i++;
    mysql_query($sql);
  }
}
echo $i." adet islem sonlandirilmistir";
?>

mysql acik baglantilari ve processleri goruntuleme

mysql’e konsoldan bağlandıktan sonra show status like ‘Conn%’ komutunu çalıştırdığımızda açık olan bağlantıyı görüntüleyebiliriz.

mysql> show status like 'Conn%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Connections     |  78     |
+-----------------------+---------+
1 row in set (0.00 sec)

Aynı şekilde eğer show status like ‘%onn%’ komutunu çalıştırdığımızda da bu sefer connection ile ilgili diğer alanların da sonuçları gelir karşımıza.

mysql> show status like '%onn%';
+-------------------------------------+----------+
| Variable_name                | Value |
+-------------------------------------+----------+
| Aborted_connects          |     1     |
| Connections                   |    78    |
| Max_used_connections   |     1    |
| Ssl_client_connects        |    0      |
| Ssl_connect_renegotiates |   0     |
| Ssl_finished_connects    |     0     |
| Threads_connected        |     1     |
+-------------------------------------+----------+
7 rows in set (0.00 sec)

Bunlara ek olarak bir de process list görüntüleyebiliriz, onu da şu komutla gerçeklememiz mümkün; show processlist

mysql> show processlist;
+----+------+--------------+-------+---------------+--------+--------+-------------------------+
| Id | User | Host      | db   | Command | Time | State  | Info                   |
+----+------+---------------+---------+------------+------+-----------+-------------------------+
| 77 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+----+------+---------------+---------+-------------+------+----------+-------------------------+
1 row in set (0.02 sec)

Mysql ile işlem yaparken bu son komutu çalıştırdığınızda, daha farklı sonuçlar alabileceğinizi deneyerek görebilirsiniz.

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.