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;