Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak stworzyć sekwencję w MySQL?

Jest to rozwiązanie sugerowane przez Instrukcja MySQL :

Jeśli wyrażenie jest podane jako argument funkcji LAST_INSERT_ID(), wartość argumentu jest zwracana przez funkcję i jest pamiętana jako następna wartość do zwrócenia przez LAST_INSERT_ID(). Można to wykorzystać do symulacji sekwencji:

Utwórz tabelę do przechowywania licznika sekwencji i zainicjuj go:

    mysql> CREATE TABLE sequence (id INT NOT NULL);
    mysql> INSERT INTO sequence VALUES (0);

Użyj tabeli, aby wygenerować numery sekwencyjne w następujący sposób:

    mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
    mysql> SELECT LAST_INSERT_ID();

Instrukcja UPDATE zwiększa licznik sekwencji i powoduje, że następne wywołanie LAST_INSERT_ID() zwraca zaktualizowaną wartość. Instrukcja SELECT pobiera tę wartość. Do uzyskania wartości można również użyć funkcji API mysql_insert_id() C. Zobacz Sekcja 23.8.7.37,„mysql_insert_id()”.

Możesz generować sekwencje bez wywoływania LAST_INSERT_ID(), ale użyteczność użycia funkcji w ten sposób polega na tym, że wartość ID jest zachowywana na serwerze jako ostatnia automatycznie generowana wartość. Jest to bezpieczne dla wielu użytkowników, ponieważ wielu klientów może wydać instrukcję UPDATE i uzyskać własną wartość sekwencji za pomocą instrukcji SELECT (lub mysql_insert_id()), bez wpływu lub wpływu innych klientów, którzy generują własne wartości sekwencji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Filtrować według COUNT(*)?

  2. Pobierz najnowszy wiersz dla podanego identyfikatora

  3. MySQL (lub PHP?) grupuje wyniki według danych pola

  4. Połączenie nie powiodło się:Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK) z funkcji php

  5. Jak zaprogramować wyzwalacz MySQL, aby wstawić wiersz do innej tabeli?