
Veritabanında güncelleme işlemini yapmak için update ifadesini kullanıyoruz. İlk başta mysql e bağlanıyorum
# cmd
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.22-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Daha sonra use ile kullanmak istediğim veritabanını temsil ediyorum.
mysql > use telefon;
Database changed
daha sonra show tables ile mevcut tabloları görebilirim
mysql > show tables;
+---------------------------+
| Tables_in_telefon |
+---------------------------+
| telefonlar |
+---------------------------+
1 rows in set (0.00 sec)
daha sonra select * from telefonlar diyerek
mysql> select * from telefonlar;
+----+----------+------------+--------+
| id | isim | soyisim | numara |
+----+----------+------------+--------+
| 1 | Süleyman | Demirkeser | 0322 |
| 2 | Süleyman | NULL | NULL |
| 3 | Süleyman | Demirkeser | NULL |
| 7 | Süleyman | NULL | NULL |
+----+----------+------------+--------+
4 row in set (0.02 sec)
Tablodaki kayıtlarımı görebilirim.
İşte mevcut herhangi bir kaydı düzenlemek için update ifadesini kullanıyoruz. yazılım olarak update tablo adı daha sonra set ile atamak istediğimiz alanları eşittir değeri şeklinde sıralıyoruz. Ve sıralarken araya virgül ifadesi kullanıyoruz. Mesela isim eşittir Ahmet Soyisim eşittir Danaci şeklinde ismi ve soyismi güncellemek istiyorum.
mysql > update telefonlar set isim='Ahmet', soyisim='Danaci'
Eğerki ben bu komutu bu şekilde çalıştırırsam herhangi bir kriter vermediğim için mevcut tüm kayıtları bu değerlerle güncelleyecektir. Where koşulu ile güncelleme işlemini sınırlayabilirim.
id si yediye eşit olan kayıtların ismi Ahmet soyismi Danacı olarak değiştirmesini istiyorum.
Update tablo adı dedikten sonra set dedim alan eşittir değeri birden fazla güncelleme yapacağım için araya virgül attım. ikinci alan eşittir değeri dedim. Üçüncü alan olsaydı. üçüncü alan = değeri diyecektim.daha sonra where ile hangi tablodaki değerlerin yani satırların güncelleneceğini temsil etmiş oldum. Burda id 7 dediğimde id 7 şartını sağlayan tek kayıt var. Doğal olarak bu ifade tek kaydı güncelleyecektir.
mysql > update telefonlar set isim='Ahmet', soyisim='Danaci' where id=7
Query OK, 1 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Evet 1 satır değişti. Tekrar select * from telefonlar diyerek;
mysql> select * from telefonlar;
+----+----------+------------+--------+
| id | isim | soyisim | numara |
+----+----------+------------+--------+
| 1 | Süleyman | Demirkeser | 0322 |
| 2 | Süleyman | NULL | NULL |
| 3 | Süleyman | Demirkeser | NULL |
| 7 | Ahmet | Danaci | NULL |
+----+----------+------------+--------+
4 row in set (0.00 sec)
Tabloyu sorguladığımda yedi numaralı kaydın değiştiğini görüyorum. İşte biraz önceki ifadeye bakarsak Where kısmında id eşit yedi demiştik. Yani aynı ifadeyi buraya taşırsam aslında hangi kayıtların bu update deyiminde güncelleneceğini görebilirim
mysql> select * from telefonlar where id =7;
+----+----------+------------+--------+
| id | isim | soyisim | numara |
+----+----------+------------+--------+
| 7 | Ahmet | Danaci | NULL |
+----+----------+------------+--------+
1row in set (0.00 sec)
Mesela id si üç ten büyük olan tüm kayıtların telefonuna bir değer atayabilirim. bunun için update telefonlar set numara eşittir where id büyük eşit üç şeklide id sü üçten büyük olan tüm kayıtlara bu değeri ata diyebiliriz
mysql > update telefonlar set numara='0444' where id>=3
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
Evet iki satır etkilendi. hangi satırların olduğunu where koşulunu select ile kullanarakta görebilirim. id si üçten büyük eşit üç dediğimde
mysql> select * from telefonlar where id>=3;
+----+----------+------------+--------+
| id | isim | soyisim | numara |
+----+----------+------------+--------+
| 3 | Süleyman | Demirkeser | 0444|
| 7 | Ahmet | Danaci | 0444 |
+----+----------+------------+--------+
2 row in set (0.00 sec)
Bu iki satırın ektilendiğini tespit ediyorum. select yıldız from telefonlar dediğimde de tüm kayıtları görüyorum
mysql> select * from telefonlar;
+----+----------+------------+--------+
| id | isim | soyisim | numara |
+----+----------+------------+--------+
| 1 | Süleyman | Demirkeser | 0322 |
| 2 | Süleyman | NULL | NULL |
| 3 | Süleyman | Demirkeser | 0444 |
| 7 | Ahmet | Danaci | 0444 |
+----+----------+------------+--------+
4 row in set (0.00 sec)
Evet çalıştırdığımız update komutuyla id si üçe eşit ve büyük olan son iki kayıt güncellenmiş oldu. İşte update deyiminde tablo adı dedikten sonra update ve set yani burdaki sabit değerlerimiz daha sonra alan eşittir değeri diyerek daha sonra where ile herhangi bir koşul belirterek alanların güncellenmesini sağlayabiliriz.
Mesela ismi Süleyman ve Soyismi boş olan değerlerin numara değerini değiştirebilirim.
mysql > update telefonlar set numara='+90322' where isim = 'Süleyman' AND soyisim = NULL;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
İşte bu şekilde komut kullanarak update deyimiyle istediğim değerleri değiştirebilirim. Burda bizim id kullanmamızda bir ektende budur. Mesela ikinci numaralı kayıt bu şekilde bakarsam üçüncü kayıtların isim ve soyisimlerinin aynı olduğunu görüyorum.
Yani ben isim ve soyisme göre güncelleme yaptığımda hem birinci kayıt hem üçüncü kayıt bu işlemden etkilenecektir. Yalnız id gibi bir değerimiz olduğu zaman Direk bu parametreyi vererek ki birazönce kaydederken görmüştük ki aynı id den iki tane kaydedemiyorduk böylece istediğimiz kaydı direk güncelleyebiliriz