2016-09-09 2 views
0

Wenn ich einige Zeilen in TabelleA aus TabelleB einfügen, funktioniert es wie üblich. Die auto_increment-Schlüssel-ID der eingefügten Zeilen ist normal, aber die nächste auto_increment-ID ist eine Ausnahme. In meinem Fall zeigte das Ergebnis von SQL, dass insgesamt die betroffenen Zeilen 5504 ist und die realen eingefügten Zeilen sind 5504, aber die nächst ‚id‘ ist 8192, die wie unten sein sollten 5505.Mysql auto_increment Fehler nach "in Tabelle einfügenA (Spalte1, Spalte2) wählen Sie Spalte3, Spalte4 aus TabelleB"

mein Tisch Struktur:

-- ---------------------------- 
-- Table structure for t_ds 
-- ---------------------------- 
DROP TABLE IF EXISTS `t_ds`; 
CREATE TABLE `t_ds` (
    `id` bigint(64) NOT NULL AUTO_INCREMENT, 
    `deviceId` varchar(50) DEFAULT NULL, 
    `eventId` varchar(50) DEFAULT NULL, 
    `eventTime` bigint(64) DEFAULT NULL, 
    `logInfoId` bigint(64) DEFAULT NULL, 
    `statusCode` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `index_ds` (`deviceId`,`eventId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

und SQL INSERT-Anweisung:

INSERT INTO t_ds(deviceId, eventId, eventTime, logInfoId, statusCode) 
SELECT deviceId, eventId, eventTime, id, statusCode FROM t_loginfo 
WHERE (deviceId, eventId, eventTime) in (
    SELECT 
     deviceId, eventId, MAX(eventTime) 
    FROM 
     t_loginfo 
    GROUP BY deviceId, eventId 
) 
GROUP BY deviceId, eventId; 

ich weiß nicht, warum die Inkrementtaste ‚id‘ eine seltsame num gewesen sein, so dass ich etwas versuchen, den Grund zu finden. Zuerst lösche ich die Tabelle 't_ds', rebuildiere sie und füge sql 'limit *, 1' an die obige sql insert-Anweisung an, füge die Zeilen nacheinander ein, die seltsame Zahl verschwindet, das ist normal.

also mache ich einige Experimente dafür.

1. delete table 't_ds' , rebuild it. 
2. run the SQL insert statement with limit *,*. 

Ergebnis:

limit 0,1: insert 1 row, total rows is 1, the last id is 1, the next id is 2; 
limit 1,2: insert 2 row, total rows is 3, the last id is 3, the next id is 5; 
limit 3,3: insert 3 row, total rows is 6, the last id is 7, the next id is 8; 
limit 6,4: insert 4 row, total rows is 10, the last id is 11, the next id is 15; 
limit 10,5: insert 5 row, total rows is 15, the last id is 19, the next id is 22; 

Die Sequenz ID:

1 2 3 5 6 7 8 9 10 11 15 16 17 18 19 

andere seltsame Lage ist, ob die eingefügten Zeilen von num 5000+ oder 6000+ ist, neben id beide von zwei sind 8192.

+0

Mach dir keine Sorgen über den Wert. Trotz seines Namens garantiert die AUTO_INCREMENT-Funktion nicht wirklich, dass Werte inkrementell sind, nur dass sie EINZIGARTIG sind. – Strawberry

+0

Ist es wichtig? Das Löschen aus einer Tabelle ändert nicht den nächsten zurückgegebenen Autoinkrementwert. Sie müssen es löschen und neu erstellen. – e4c5

+0

Mögliches Duplikat von [Wert der Identity-Spalte springt plötzlich auf sql-Server auf 1001] (http://stackoverflow.com/questions/17587094/identity-column-value-suddenly-jumps-to-1001-in-sql-server) –

Antwort

0

Dies ist ein sehr häufiges Problem. Dies geschieht im Allgemeinen, wenn Sie Ihren SQL Server neu starten. Diese Art von Problem tritt auf, wenn wir uns im Entwicklungsserver befinden. Es passiert selten im Produktionsserver. Weil der Produktionsserver nicht so oft neu gestartet wird.

+0

Liest du die Frage sorgfältig? – LuoYingYing

+0

Ja, ich habe Ihre Frage sorgfältig gelesen. Ich hatte ein solches Problem. es gibt viele articals in Bezug auf das, wenn Sie danach googlen. Wenn Sie durch dieses Artical gehen, werden Sie verstehen, was ich sagen möchte. http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is –

+0

Vielen Dank für den Fall über Identitätsspalte Wert Problem. Es gab einen großen Unterschied zwischen den beiden Fällen. In meinem Fall ist dies kein Neustart im gesamten Prozess und die letzte ID wird nach dem Neustart des MySQL Server-Dienstes normal. – LuoYingYing

Verwandte Themen