sql >> Databasteknik >  >> RDS >> Mysql

Hur skapar jag en sekvens i MySQL?

Detta är en lösning föreslagen av MySQl-manual :

Om expr ges som ett argument till LAST_INSERT_ID(), returneras värdet av argumentet av funktionen och kommer ihåg som nästa värde som ska returneras av LAST_INSERT_ID(). Detta kan användas för att simulera sekvenser:

Skapa en tabell för att hålla sekvensräknaren och initiera den:

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

Använd tabellen för att generera sekvensnummer så här:

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

UPDATE-satsen ökar sekvensräknaren och gör att nästa anrop till LAST_INSERT_ID() returnerar det uppdaterade värdet. SELECT-satsen hämtar det värdet. Mysql_insert_id() C API-funktionen kan också användas för att få värdet. Se avsnitt 23.8.7.37,"mysql_insert_id()".

Du kan generera sekvenser utan att anropa LAST_INSERT_ID(), men nyttan med att använda funktionen på detta sätt är att ID-värdet bibehålls i servern som det senast automatiskt genererade värdet. Det är säkert för flera användare eftersom flera klienter kan utfärda UPDATE-satsen och få sitt eget sekvensvärde med SELECT-satsen(eller mysql_insert_id()), utan att påverka eller påverkas av andra klienter som genererar sina egna sekvensvärden.



  1. SQL Saknar höger parentes på order by-sats

  2. Hur skriver man ut 1 till 10 utan att använda Loop i PL/SQL?

  3. Kontrollera överlappning av datumintervall i MySQL

  4. Hur frågar jag alla rader inom en radie på 5 mil från mina koordinater?