
Bu dersimizde mysql e bir kayıt yaptığımız zaman eğerki o tabloda otomatik artan bir alan varsa bu otomatik artan alana mysql in ne değer verdiğini yakalamayı anlatacağım.
Mysql ime konsoldan bağlanıyorum,
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.1.22-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Telefon isminde bir veritabanım var bu veritabanınını kullanmak için use telefon diyerek ilgili veritabanına geçiyorum.
mysql> use telefon;
Database changed
Bunun içinde ise telefonlar isminde bir tablom var.
mysql> select telefonlar;
ERROR 1054 (42S22): Unknown column 'telefonlar' in 'field list'
telefonlar tablosundan select * from telefonlar diyerek hem yapıyı hemde alanları görmek suretiyle sql imi çalıştırıyorum
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)
Bu tablomda id alanım otomatik artan alan şeklinde tanımlı ve ben insert sql i çalıştırırsam ve bu id alanını vermezsem otomatik artan alan olduğu için mysql buna kendi bir değer verecektir.
Her tablonun otomatik artan alan değeri zaten tabloda kayıtlı durumda barındırılmaktadır. En son kaydedilmiş otomatik artan alanı öğrenmek için select last_insert_id() şeklinde deyimi çalıştırıyorum.
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
Dikkat ederseniz bu deyim çalıştırıldığında tek bir kayıt ve tek bir data dönderdi şu an için hiç bir kayıt işlemi yapmadığımdan dolayı bu değer sıfır. Tabloya bir kayıt yapıp sql i tekrar çalıştıralım
mysql> insert into telefonlar (adi) values("insert id");
ERROR 1054 (42S22): Unknown column 'adi' in 'field list'
Pardon sql imi düzeltiyorum alanımın ismi isim,
mysql> insert into telefonlar (isim) values("insert id");
Query OK, 1 row affected (0.00 sec)
Evet bir kayıt gerçekleşti.
Yukarı tuşu ile az önce yazdığım sql e gelip enter a bastığımda bu sefer last inser id değerinin 4 olarak olduğunu görüyorum.
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 4 |
+------------------+
1 row in set (0.00 sec)
Bunu doğrulamak için ise select * from telefonlar dediğimde yeni kaydın 4 id si ile kaydedildiğini görüyorum.Last insert id değeri her bir kayıtta güncellenir.Yeni bir kayıt işlemi yapana kadar önceki değerini korumaya devam eder Bu durumda ben update select gibi işlemler yapsamada insert çalıştırmadığım sürece select last_insert_id dediğimde bu değeri olduğu gibi görürüm.Burdaki last_insert_id mysql de tanımlı bir fonksiyondur. Bu şekilde select last_insert_id diyerek sql yolu ile mysql in bu otomatik artan alana verdiği son değeri alabilirim