2014-10-26 37 views
11

Ich versuche, eine Sequenz in MySQL zu erstellen (ich bin sehr neu in SQL als Ganzes). Ich verwende den folgenden Code, aber es verursacht einen Fehler:Wie erstelle ich eine Sequenz in MySQL?

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622; 

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

Edit:

Angeblich hat MySQL keine Sequenzen verwenden. Ich verwende jetzt den folgenden Code, aber das verursacht auch Fehler. Wie repariere ich sie?

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

Edit:

Ich glaube, ich ein Update gefunden. Für phpMyAdmin (das ich verwendet habe) können Sie den folgenden Code verwenden.

Ich habe keine Ahnung, warum es das bevorzugt, aber wenn jemand sonst Hilfe braucht, dann gehts. :)

+0

In MySQL gibt es so etwas nicht. Was versuchst du zu machen? – Barmar

+0

In MySQL verwenden Sie eine Spalte mit dem Attribut AUTO_INCREMENT. – Barmar

+0

MySQL unterstützt keine Sequenzen –

Antwort

15

Auschecken this article. Ich glaube, es sollte dir helfen, das zu bekommen, was du willst. Wenn Ihre Tabelle bereits vorhanden ist und bereits Daten enthält, kann der Fehler, den Sie erhalten, darauf zurückzuführen sein, 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 behandelt werden, in MySQL nicht. Sie können jedoch auto_increment verwenden, um das zu erreichen, was Sie wollen.

Ohne zusätzliche Details zu dem spezifischen 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; 

This link ist auch hilfreich für die Nutzung von auto_increment beschreiben. Das Festlegen des AUTO_INCREMENT-Werts scheint ein table option zu sein, und nicht etwas, das speziell als ein Spaltenattribut angegeben wird.

Außerdem können Sie den Autoinkrement-Startwert über einen der oben aufgeführten Links alternativ über eine alter zu Ihrer Tabelle festlegen.

ALTER TABLE ORD AUTO_INCREMENT = 622; 

UPDATE 2 Hier ist ein Link zu einem working sqlfiddle example, Autoinkrement verwenden.
Ich hoffe diese Info hilft.

+0

Danke für die Hilfe, aber jetzt behauptet MySQL, dass dieser Code einen "Falschen Spaltenbezeichner" enthält. – Ben

+0

Ich benutze eine große Sequenz von Code, um die Tabellen jedes Mal von Grund auf neu zu erstellen (wenn etwas schief geht, lösche ich die Tabellen und fange neu an). MySQL hatte vorher noch nie ein Problem mit "numeric (4)". – Ben

+0

Missachtet meinen vorherigen Kommentar. Ich habe es gelöscht, da es falsch ist. – Daileyo

17

Dies ist eine Lösung suggested by the MySQl manual:

If expr is given as an argument to LAST_INSERT_ID(), the value of the argument is returned by the function and is remembered as the next value to be returned by LAST_INSERT_ID(). This can be used to simulate sequences:

Create a table to hold the sequence counter and initialize it:

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

Use the table to generate sequence numbers like this:

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

The UPDATE statement increments the sequence counter and causes the next call to LAST_INSERT_ID() to return the updated value. The SELECT statement retrieves that value. The mysql_insert_id() C API function can also be used to get the value. See Section 23.8.7.37, “mysql_insert_id()”.

You can generate sequences without calling LAST_INSERT_ID(), but the utility of using the function this way is that the ID value is maintained in the server as the last automatically generated value. It is multi-user safe because multiple clients can issue the UPDATE statement and get their own sequence value with the SELECT statement (or mysql_insert_id()), without affecting or being affected by other clients that generate their own sequence values.

2

Durch den Zuwachs Tabelle erstellen Sie sollten sich bewusst sein nicht eingefügten Zeilen zu löschen. Der Grund dafür ist, große dumb-Daten in db mit ID-s nicht zu speichern. Andernfalls würde es im Falle eines MySQL-Neustarts die maximal vorhandene Zeile erhalten und das Inkrement von diesem Punkt aus fortsetzen, wie in der Dokumentation erwähnt. http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html

Verwandte Themen