Anasayfa

Şimdiki dersimizde bir mysql tablosunun nasıl kopyasını oluşturcağımızı inceleyeceğiz. Bazı durumlarda mevcut tablomuzun bir yedeğini içindeki verilerle veya sadece tablo yapısıyla oluşturmamız gerekir. İşte bu oluşturma işleminde düz mantık düşünürsek tüm tablomuzu sql olarak yedek aldıktan sonra tablo isimlerini değiştirebilir. Daha sonra tekrar tabloyu sunucumuza yükleyebilir veya rename table ile tabloyu tekrar isimlendirme yoluna gidebiliriz. Bu gibi işlemlerle uğraşmak yerine sql ifadeleri kullanarak tablonun yedeğini alarak ve içindeki verilerinde tamamını yada istediğimiz bir kısmını bu yedek aldığımız tabloya taşıyabiliriz.

Bunun için mysql e bağlanıyorum.

# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13 to server version: 4.1.22-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

use ile veritabanımı değiştiriyorum.

mysql> use telefon;
Database changed

Daha sonra show tables diyerek mevcut veritabanındaki tablolarımı görelim

mysql> show tables;
+-------------------+
| Tables_in_telefon |
+-------------------+
| telefonlar        |
| telefonlar2       |
+-------------------+
2 rows in set (0.00 sec)

Burdaki telefonlar2 ismindeki tablom telefonlar tablosunun kopyası.  Şimdi bu tabloyu düşürüp.
mysql> drop telefonlar2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'telef
onlar2' at line 1

(İfadede table ifadesi eksik yazıldığı için hata vermiştir)

drop table telefonlar iki dedikten sonra;

mysql> drop table telefonlar2;
Query OK, 0 rows affected (0.00 sec)

Bu düşürdüğüm tabloyu nasıl kopyaladığımı ve üzerinde nasıl işlemler yaptığımı inceleyelim. Bir tabloyu oluşturmak için create table ifadesini kullandığımı daha önceden biliyoruz. İşte create table ifadesinden sonra oluşturmak istediğim tablonun ismini veriyorum. Telefonlar2 isminde bir tablo oluşturmak istiyorum. Bu tabloyu telefonlar tablosunun kopyası olarak oluşturacağım için buraya normal bir select deyimi yazarak sql ifademi bu şekilde oluşturuyorum.

Create table yeni oluşturulacak tablo adını dedikten sonra select yıldız forum ile yedeği alınacak tabloyu belirterek tablonun kopyasını oluşturabiliriz.

mysql> create table telefonlar2 select * from telefonlar;
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

evet komutu çalıştırdığımda 3 kayıtlık tablonun kopyasının oluşturulduğunu görüyorum. Daha sonra show tables diyerek mevcut tablolarımı tekrar listeliyorum.

mysql> show tables;
+-------------------+
| Tables_in_telefon |
+-------------------+
| telefonlar        |
| telefonlar2       |
+-------------------+
2 rows in set (0.00 sec)

Mevcut kayıtlarda kaçtane kayıt olduğunu count ifadesi ile görelim;

mysql> select count(id) from telefonlar;
+-----------+
| count(id) |
+-----------+
|         3 |
+-----------+
1 row in set (0.00 sec)

mysql> select count(id) from telefonlar2;
+-----------+
| count(id) |
+-----------+
|         3 |
+-----------+
1 row in set (0.00 sec)

Gördüğünüz gibi her iki tablodada aynı sayıda ve aynı şekilde kayıtlarımız mevcut. İşte create table telefonlar2 boşluk select * from telefonlar diyerek tablomun kopyasını oluşturdum. Ve bu işlemle içindeki tüm kayıtlarla yeni tabloma taşımış oldum.

Şimdi drop table telefonlar2 diyerek tablomu geri düşüreyim

mysql> drop table telefonlar2;
Query OK, 0 rows affected (0.00 sec)

İşte az önce yazdığımı ifadedeki select deyimi normal yazdığımız bir select deyiminden farksızdır. Biz istersek buraya kriter vererek sadece belirli kayıtların yeni tabloya taşınmasını sağlayabiliriz. Meselar id si 2 den büyük olan kayıtların yeni tabloya taşınmasını istiyorsak

create table telefonlar2 select yıldız from telefonlar where id büyük iki ifadesini kullanabilirim.  Dikkat edersek bu sefer tek bir kaydın taşındığını görüyoruz.

mysql> create table telefonlar2 select * from telefonlar where id>2;

Query OK, 1 row affected (0.09 sec)
Records: 1  Duplicates: 0  Warnings: 0

İşte select * from telefonlar2 dediğimizde tek bir kaydın olduğunu

mysql> select * from telefonlar2;

+----+-------+---------+--------+
| id | isim  | soyisim | numara |
+----+-------+---------+--------+
|  3 | Ahmet | Danaci  | 959    |
+----+-------+---------+--------+
1 row in set (0.00 sec)

Select * from telefonlar1 dediğimde ise  üç kaydın olduğunu görüyorum

mysql> select * from telefonlar1;
ERROR 1146 (42S02): Table 'telefon.telefonlar1' doesn't exist

mysql> select * from telefonlar;
+----+----------+------------+--------+
| id | isim     | soyisim    | numara |
+----+----------+------------+--------+
|  1 | Suleyman | Demirkeser | 0322   |
|  2 | Tel      | tel2       | 9595   |
|  3 | Ahmet    | Danaci     | 959    |
+----+----------+------------+--------+
3 rows in set (0.00 sec)

İşte bu şekilde istediğimiz sadce belirli bir veri setinide yeni tabloya taşıyabiliriz. Burdaki taşıma işlemini yani tablonun oluşturulması ile ilgili sql deyimini tekrar çalıştırdığımda kopya tablo mevcutsa hata ile karşılaşacağız.

mysql> create table telefonlar2 select * from telefonlar where id>2;
ERROR 1050 (42S01): Table 'telefonlar2' already exists

Sql i tekrar çalıştırdığımda tablo mevcut olduğu için bana uyarı verdi. İşte burdaki hatayı engellemek için eğerki tablo sadece yoksa tablonun oluşturulmasını istersem if not exists ifadesini burdada kullanarak tablo eğer var değilse yani mevcut değilse kopyasının oluşturulmasını sağlaysabilirim.

mysql> create table if not exits telefonlar2 select * from telefonlar where id>2
;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'exits
 telefonlar2 select * from telefonlar where id>2' at line 1
mysql> create table if not exists telefonlar2 select * from telefonlar where id>
2;
Query OK, 1 row affected, 1 warning (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

Şimdi drop table telefonlar2 diyerek tablomu düşüreyim.

mysql> drop table telefonlar2;
Query OK, 0 rows affected (0.00 sec)

burdaki select ifademizin bir yolla hiç bir kayıt döndermemesini sağlasaydık. Bu sefer boş, kayıtsız bir kopyalama işlemi yaptığımız için sadece tabloyu yapı olarak kopyalamış olurduk. En basitinden burdaki where ifadesine bir eşit sıfır yazarak , durumun oluşması mümkün değil hiç bir kaydın taşınmamasınıda sağlayabilirim. İşte burdaki sql ifademi bu şekilde çalıştığımda

mysql> create table if not exists telefonlar2 select * from telefonlar where 1=0;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

Tablom yine kopyalanır. Yalnız içinde hiç bir kayıt yoktur. İşte bu ifadeleri kullanarak  tablomun bir kopyasını oluşturabilir ve burda verdiğim select deyimindeki where kıstası ile çekilcek kayıtları limitlendirerek istediğim bir veri setinin yeni tabloya taşınmasını yani kopyasının oluşturulmasını sağlayabilirim.

mysql> select * from telefonlar2;
Empty set (0.00 sec)


Sitenize Aşağıdaki kodlari ekleyerek videoyu izletebilirsiniz
Bu Sayfayı İmleyebilirsiniz : Bookmark and Share
Videoya Henüz Yorum Yazılmamış
İlgili Dosya Bulunmamaktadır
Adınız, Soyadınız
Mail
Telefon
Adres
Referans

Kullanıcı Girişi

Kullanıcı Adı :
Şifre :
Ücretsiz Üyelik Şifre Hatırlatma
Sitede bulunan Tüm dökümanların izinsiz kopyalanması yasaktır. ProgramlamaTv.com 2008
Hizmet Sözleşmesi - Gizlilik İlkesi