SQL - Sıraları Kullanma

Bir dizi, talep üzerine sırayla üretilen 1, 2, 3, ... tam sayıları kümesidir. Diziler sıklıkla veritabanlarında kullanılır çünkü birçok uygulama bir tablodaki her satırın benzersiz bir değer içermesini gerektirir ve sıralar bunları oluşturmak için kolay bir yol sağlar.

Bu bölüm, MySQL'de dizilerin nasıl kullanılacağını açıklar.

AUTO_INCREMENT sütunu kullanılıyor

MySQL'de dizileri kullanmanın en basit yolu, bir sütunu AUTO_INCREMENT olarak tanımlamak ve gerisini ilgilenmesi için MySQL'e bırakmaktır.

Misal

Aşağıdaki örneği deneyin. Bu bir tablo oluşturacak ve bundan sonra bu tabloya MySQL tarafından otomatik olarak artırıldığı için bir kayıt kimliği vermenin gerekli olmadığı birkaç satır ekleyecektir.

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO INSECT (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM INSECT ORDER BY id;
+----+-------------+------------+------------+
| id | name        | date       | origin     |
+----+-------------+------------+------------+
|  1 | housefly    | 2001-09-10 | kitchen    |
|  2 | millipede   | 2001-09-10 | driveway   |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

AUTO_INCREMENT Değerlerini Alın

LAST_INSERT_ID () bir SQL işlevidir, bu nedenle onu SQL ifadelerinin nasıl yayınlanacağını anlayan herhangi bir istemcinin içinden kullanabilirsiniz. Aksi takdirde, PERL ve PHP betikleri, son kaydın otomatik olarak artan değerini almak için özel işlevler sağlar.

PERL Örneği

Kullan mysql_insertidSorgu tarafından oluşturulan AUTO_INCREMENT değerini elde etmek için öznitelik. Bu özniteliğe, sorguyu nasıl yayınladığınıza bağlı olarak bir veritabanı tanıtıcısı veya bir ifade tutamacıyla erişilir. Aşağıdaki örnek, veritabanı tanıtıcısı aracılığıyla buna başvurur.

$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

PHP Örneği

AUTO_INCREMENT değeri üreten bir sorgu gönderdikten sonra, değeri çağırarak alın mysql_insert_id( ) işlevi.

mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Mevcut Bir Sırayı Yeniden Numaralandırma

Bir tablodan çok sayıda kayıt sildiğiniz ve tüm kayıtları yeniden sıralamak istediğiniz bir durum olabilir. Bu, basit bir numara kullanılarak yapılabilir, ancak bunu yaparken çok dikkatli olmalısınız ve masanızın başka bir masa ile birleşip birleşmediğini kontrol etmelisiniz.

Bir AUTO_INCREMENT sütununun yeniden dizilmesinin kaçınılmaz olduğunu belirlerseniz, bunu yapmanın yolu sütunu tablodan bırakıp ardından tekrar eklemektir.

Aşağıdaki örnek, bu teknik kullanılarak böcek tablosundaki id değerlerinin nasıl yeniden numaralandırılacağını gösterir.

mysql> ALTER TABLE INSECT DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Sıraya Belirli Bir Değerden Başlama

Varsayılan olarak, MySQL diziyi 1'den başlatır, ancak tablo oluşturma sırasında başka herhangi bir sayıyı da belirtebilirsiniz.

Aşağıdaki kod bloğu, MySQL'in diziyi 100'den başlayacağı bir örneğe sahiptir.

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Alternatif olarak, tabloyu oluşturabilir ve ardından ALTER TABLE ile ilk sıra değerini ayarlayabilirsiniz.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;