środa, 19 września 2018

MySQL używanie sekwencji

MySQL używanie sekwencji

Sekwencja to zbiór liczb całkowitych 1, 2, 3, ... generowanych w kolejności na określone zapotrzebowanie. Sekwencje są często używane w bazach danych, ponieważ wiele aplikacji wymaga, aby każdy wiersz w tabeli zawierał unikalną wartość, a sekwencje zapewniają łatwy sposób ich generowania.
W tym rozdziale opisano sposób użycia sekwencji w MySQL.

Korzystanie z kolumny AUTO_INCREMENT

Najprostszym sposobem użycia Sekwencji przez MySQL jest zdefiniowanie kolumny jako AUTO_INCREMENT i pozostawienie pozostałych rzeczy MySQL do zachowania.
Przykład
Wypróbuj poniższy przykład. Spowoduje to utworzenie tabeli, a następnie wstawi kilka wierszy do tej tabeli, w których nie jest wymagane podanie identyfikatora rekordu, ponieważ jest automatycznie zwiększany przez MySQL.
mysql> CREATE TABLE owad
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> nazwa VARCHAR(30) NOT NULL, # rodzaj owada
   -> data DATE NOT NULL, # data
   -> pochodzenie VARCHAR(30) NOT NULL # gdzie zebrane
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,nazwa,data,pochodzenie) VALUES
   -> (NULL,'mucha','2017-09-10','kuchnia'),
   -> (NULL,'stonoga','2017-09-10','podjazd'),
   -> (NULL,'konik polny','2017-09-10','podwórko');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM owad ORDER BY id;
+----+-------------+------------+------------+
| id |    nazwa     |    data    |   pochodzenie |
+----+-------------+------------+------------+
|  1 |  mucha       | 2017-09-10 |   kuchnia  |
|  2 |  stonoga     | 2017-09-10 |  podjazd   |
|  3 | konik polny  | 2017-09-10 | podwórko   |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Uzyskaj wartości AUTO_INCREMENT

LAST_INSERT_ID () jest funkcją SQL, więc można go używać z poziomu dowolnego klienta, który rozumie, jak wydawać polecenia SQL. W przeciwnym razie skrypty PERL i PHP zapewniają wyjątkowe funkcje pobierania automatycznie zwiększanej wartości ostatniego rekordu.
PERL Przykład
Użyj atrybutu mysql_insertid, aby uzyskać wartość  AUTO_INCREMEN wygenerowaną przez zapytanie. Do tego atrybutu można uzyskać dostęp za pomocą uchwytu bazy danych lub uchwytu instrukcji, w zależności od tego, w jaki sposób wydajesz zapytanie.
Poniższy przykład odwołuje się do niego poprzez uchwyt bazy danych.
$dbh->do ("INSERT INTO owad (nazwa,data,pochodzenie)
VALUES('ćma','2017-09-14','parapet')");
my $seq = $dbh->{mysql_insertid};
Przykład PHP
Po wygenerowaniu zapytania generującego wartość AUTO_INCREMENT, pobierz wartość, wywołując komendę mysql_insert_id ().
mysql_query ("INSERT INTO owad (nazwa,data,pochodzenie)
VALUES('ćma','2017-09-14','parapet')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Przenumerowanie istniejącej sekwencji

Może się zdarzyć, że usunąłeś wiele rekordów z tabeli i chcesz ponownie uporządkować wszystkie rekordy. Można to zrobić za pomocą prostego triku, ale powinieneś bardzo uważać, aby to zrobić, jeśli twoja tabela łączy się z inną tabelą.
Jeśli stwierdzisz, że ponowne wprowadzenie kolumny AUTO_INCREMENT jest nieuniknione, sposobem na to jest usunięcie kolumny z tabeli, a następnie dodanie jej ponownie.
Poniższy przykład ilustruje sposób ponumerowania wartości id w tabeli przy użyciu tej techniki.
mysql> ALTER TABLE owad DROP id;
mysql> ALTER TABLE owad
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Uruchamianie sekwencji o określonej wartości

Domyślnie MySQL rozpocznie sekwencję od 1, ale możesz podać dowolną inną liczbę również w momencie tworzenia tabeli.
Poniższy program jest przykładem, który pokazuje, w jaki sposób MySQL rozpocznie sekwencję od 100.
mysql> CREATE TABLE owad
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> nazwa VARCHAR(30) NOT NULL, # rodzaj owada
   -> data DATE NOT NULL, # data zebrana
   -> pochodzenie VARCHAR(30) NOT NULL # gdzie zebrane
);

Alternatywnie można utworzyć tabelę, a następnie ustawić początkową wartość sekwencji za pomocą polecenia ALTER TABLE.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;






Brak komentarzy:

Prześlij komentarz