MySQLi - użycie sekwencji

Sekwencja to zbiór liczb całkowitych 1, 2, 3, ..., które są generowane w kolejności na żądanie. Sekwencje są często używane w bazach danych, ponieważ wiele aplikacji wymaga, aby każdy wiersz w tabeli zawierał unikatową wartość, a sekwencje zapewniają łatwy sposób ich generowania. W tym rozdziale opisano, jak używać sekwencji w MySQLi.

Używam kolumny AUTO_INCREMENT

Najprostszym sposobem użycia Sequences w MySQLi jest zdefiniowanie kolumny jako AUTO_INCREMENT i pozostawienie pozostałych rzeczy MySQLi.

Przykład

Wypróbuj następujący przykład. Spowoduje to utworzenie tabeli, a następnie wstawi kilka wierszy w tej tabeli, w których nie jest wymagane podawanie identyfikatora rekordu, ponieważ jest on automatycznie zwiększany przez MySQLi.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Uzyskaj wartości AUTO_INCREMENT

LAST_INSERT_ID () jest funkcją SQL, więc można jej używać z poziomu dowolnego klienta, który rozumie, jak wydawać instrukcje SQL. W przeciwnym razie skrypty PERL i PHP zapewniają ekskluzywne funkcje do pobierania automatycznie zwiększonej wartości ostatniego rekordu.

Przykład PERL

Użyj atrybutu mysql_insertid, aby uzyskać wartość AUTO_INCREMENT wygenerowaną przez zapytanie. Dostęp do tego atrybutu uzyskuje się przez uchwyt bazy danych lub uchwyt instrukcji, w zależności od sposobu wysłania zapytania. Poniższy przykład odwołuje się do niego poprzez uchwyt bazy danych:

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

Przykład PHP

Po wysłaniu zapytania, które generuje wartość AUTO_INCREMENT, pobierz wartość, wywołując mysql_insert_id () -

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

Zmiana numeracji istniejącej sekwencji

Może się zdarzyć, że usunąłeś wiele rekordów z tabeli i chcesz zmienić kolejność wszystkich rekordów. Można to zrobić za pomocą prostej sztuczki, ale powinieneś być bardzo ostrożny, jeśli twój stół ma połączenia z innym stołem.

Jeśli stwierdzisz, że ponowne sekwencjonowanie kolumny AUTO_INCREMENT jest nieuniknione, sposobem na to jest usunięcie kolumny z tabeli, a następnie dodanie jej ponownie. Poniższy przykład pokazuje, jak przenumerować wartości identyfikatorów w tabeli owadów za pomocą tej techniki -

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

Rozpoczynanie sekwencji o określonej wartości

Domyślnie MySQLi rozpocznie sekwencję od 1, ale możesz podać również dowolną inną liczbę w momencie tworzenia tabeli. Poniżej znajduje się przykład, w którym MySQLi rozpocznie sekwencję od 100.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

Alternatywnie możesz utworzyć tabelę, a następnie ustawić początkową wartość sekwencji za pomocą ALTER TABLE.

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;