poniedziałek, 3 września 2018

SQL - używanie sekwencji


SQL - używanie sekwencji

Sekwencja to zbiór liczb całkowitych 1, 2, 3, ... generowanych 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ł 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 w MySQL jest zdefiniowanie kolumny jako AUTO_INCREMENT, a resztę pozostawić MySQL, aby zachować ostrożność.
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 on automatycznie zwiększany przez MySQL.
mysql> create table owady (
-> id int unsigned not null auto_increment,
-> primary key (id),
-> nazwa varchar(30) not null,
-> data date not null,
-> pochodzenie varchar(30) not null
);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into owady (id, nazwa, data, pochodzenie)
values
(null,'mucha','2018-05-13','kuchnia'),
(null,'chrabąszcz','2018-07-16','poddasze'),
(null,'komar','2018-06-13','przedpokój');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from owady;
+----+------------+------------+-------------+
| id | nazwa      | data       | pochodzenie |
+----+------------+------------+-------------+
|  1 | mucha      | 2018-05-13 | kuchnia     |
|  2 | chrabąszcz | 2018-07-16 | poddasze    |
|  3 | komar      | 2018-06-13 | przedpokój  |
+----+------------+------------+-------------+
3 rows in set (0.00 sec)

Uzyskaj wartości AUTO_INCREMENT

LAST_INSERT_ID () jest funkcją SQL, więc można jej używać z dowolnego klienta, który rozumie, jak wydawać instrukcje 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_INCREMENT 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 owady (nazwa,data,pochodzenie)
VALUES('ćma','2018-05-14','parapetr')");
my $seq = $dbh->{mysql_insertid};

Przykład PHP

Po wydaniu zapytania, które generuje wartość AUTO_INCREMENT, pobierz wartość, wywołując funkcję mysql_insert_id ().
mysql_query ("INSERT INTO owady (nazwa,data,pochodzenie)
VALUES('ćma','2018-05-14','parapetr')", $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ą prostej sztuczki, ale powinieneś bardzo uważać, aby to zrobić i sprawdzić, czy tabela ma połączenie z inną tabelą, czy nie.
Jeśli stwierdzisz, że ponowne ustalenie 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 id w tabeli owadów za pomocą tej techniki.
mysql> ALTER TABLE OWADY DROP id;
mysql> alter table owady
    -> 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 blok kodu jest przykładem, w którym MySQL rozpocznie sekwencję od 100.
mysql> create table owady (
-> id int unsigned not null auto_increment = 100,
-> primary key (id),
-> nazwa varchar(30) not null,
-> data date not null,
-> pochodzenie varchar(30) not null
);
Alternatywnie możesz utworzyć tabelę, a następnie ustawić początkową wartość sekwencji za pomocą ALTER TABLE.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;

Brak komentarzy:

Prześlij komentarz