it-swarm.com.de

Wie erstelle ich eine Sequenz in MySQL?

Ich versuche, eine Sequenz in MySQL zu erstellen (ich bin ganz neu für SQL.) Ich verwende den folgenden Code, verursacht jedoch einen Fehler:

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;

ORDID bezieht sich auf ein Feld in einer Tabelle, die ich verwende. Wie erstelle ich die Sequenz richtig?

Bearbeiten:

MySQL verwendet angeblich keine Sequenzen. Ich verwende jetzt den folgenden Code, aber das verursacht auch Fehler. Wie kann ich sie reparieren?

CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code

Bearbeiten:

Ich glaube, ich habe eine Lösung gefunden. Für phpMyAdmin (den ich verwendet habe) können Sie den folgenden Code verwenden.

ALTER TABLE ORD AUTO_INCREMENT = 622;

Ich habe keine Ahnung, warum es das lieber ist, aber wenn noch jemand Hilfe braucht, dann hier. :)

16
Ben

Check out dieser Artikel . Ich glaube, es sollte Ihnen helfen, das zu bekommen, was Sie wollen. Wenn Ihre Tabelle bereits vorhanden ist und bereits Daten darin enthalten sind, liegt der Fehler möglicherweise daran, dass auto_increment versucht, einen Wert zuzuweisen, der bereits für andere Datensätze vorhanden ist.

Kurz gesagt, wie andere bereits in Kommentaren erwähnt haben, existieren Sequenzen, wie sie in Oracle gedacht und verarbeitet werden, in MySQL nicht. Sie können jedoch wahrscheinlich auto_increment verwenden, um das zu erreichen, was Sie möchten. 

Ohne zusätzliche Angaben zu dem jeweiligen Fehler ist es schwierig, spezifischere Hilfe bereitzustellen.

UPDATE

CREATE TABLE ORD (
  ORDID INT NOT NULL AUTO_INCREMENT,
  //Rest of table code
  PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;

Dieser Link ist auch hilfreich bei der Beschreibung der Verwendung von auto_increment . Das Festlegen des AUTO_INCREMENT-Werts scheint eine Tabellenoption zu sein und nicht etwas, das speziell als Spaltenattribut angegeben ist.

Außerdem können Sie für einen der oben genannten Links alternativ den Startwert für das automatische Inkrement über eine Änderung an Ihrer Tabelle festlegen.

ALTER TABLE ORD AUTO_INCREMENT = 622;

UPDATE 2 Hier ist ein Link zu einem working sqlfiddle-Beispiel , das Auto-Inkrement verwendet.
Ich hoffe, diese Info hilft.

17
Daileyo

Dies ist eine Lösung vorgeschlagen vom MySQl-Handbuch :

Wenn expr als Argument für LAST_INSERT_ID () angegeben ist, wird der Wert von Das Argument wird von der Funktion zurückgegeben und als nächstes gespeichert Wert, der von LAST_INSERT_ID () zurückgegeben werden soll. Dies kann zur Simulation von .__ verwendet werden. Sequenzen:

Erstellen Sie eine Tabelle für den Sequenzzähler und initialisieren Sie ihn:

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

Verwenden Sie die Tabelle, um Sequenznummern wie folgt zu generieren:

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

Die UPDATE-Anweisung erhöht den Sequenzzähler und bewirkt, dass der nächste Aufruf von LAST_INSERT_ID () den aktualisierten Wert zurückgibt. Das Die SELECT-Anweisung ruft diesen Wert ab. Die C-API von mysql_insert_id () Funktion kann auch verwendet werden, um den Wert zu erhalten. Siehe Abschnitt 23.8.7.37, "Mysql_insert_id ()". 

Sie können Sequenzen generieren, ohne LAST_INSERT_ID () aufzurufen, jedoch die Die Funktion kann auf diese Weise verwendet werden, wenn der ID-Wert .__ ist. wird als letzter automatisch generierter Wert auf dem Server gespeichert. Es ist sicher für mehrere Benutzer, da mehrere Clients UPDATE .__ ausgeben können. Anweisung und erhalten ihren eigenen Sequenzwert mit der SELECT-Anweisung (oder mysql_insert_id ()), ohne Auswirkungen auf andere Clients, die ihre eigenen Sequenzwerte generieren.

24
pupitetris

Beim Erstellen der Inkrementtabelle sollten Sie wissen, dass eingefügte Zeilen nicht gelöscht werden sollen. Grund dafür ist, dass keine großen Daten in db mit ID-s gespeichert werden. Andernfalls würde bei einem Neustart von mysql die maximal vorhandene Zeile abgerufen und ab diesem Punkt weiter erhöht, wie in der Dokumentation http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling erwähnt. html

2
Dato Janez

Wenn Sie etwas anderes als AUTO_INCREMENT benötigen, können Sie immer noch Trigger verwenden.

0
Marek Lisiecki