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.
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
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
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) –