Ich habe die folgende Tabellenstruktur (SHOW CREATE
Befehl gerade verwendet wird):doppelte Eintrag für Schlüssel ‚primären‘ für jede INSERT-Abfrage ich in einer bestimmten Tabelle versuchen
CREATE TABLE `ipstats` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(15) NOT NULL,
`online` ENUM('n','y') NOT NULL DEFAULT 'y',
`last_used` DATETIME NOT NULL DEFAULT '1981-09-30 00:00:00',
PRIMARY KEY (`id`),
UNIQUE INDEX `ip` (`ip`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=253691;
Nun hole ich einfach ein paar letzten Werte (ich habe die IP-Adressen für die Demonstration geändert):
mysql> SELECT * FROM ipstats ORDER BY id DESC LIMIT 10;
+--------+----------------+--------+---------------------+
| id | ip | online | last_used |
+--------+----------------+--------+---------------------+
| 253690 | 10.204.102.38 | n | 2013-10-19 14:14:33 |
| 253689 | 10.188.124.196 | n | 2013-10-19 10:46:25 |
| 253688 | 10.166.124.194 | n | 2013-10-19 16:49:40 |
| 253687 | 10.250.137.166 | n | 2013-10-19 13:51:56 |
| 253686 | 10.221.102.39 | n | 2013-10-19 14:13:03 |
| 253685 | 10.129.102.57 | n | 2013-10-19 18:45:20 |
| 253684 | 10.214.102.39 | n | 2013-10-19 03:43:55 |
| 253683 | 10.31.142.41 | n | 2013-10-19 17:27:08 |
| 253682 | 10.41.142.154 | n | 2013-10-19 00:52:11 |
| 253681 | 10.41.124.84 | n | 2013-10-19 10:37:12 |
+--------+----------------+--------+---------------------+
Danach, ich werde versuchen, eine einfache INSERT
Anweisung auszuführen:
INSERT INTO `ipstats` (`ip`, `last_used`)
VALUES ('10.3.100.244', NOW())
ON DUPLICATE KEY UPDATE
`online` = 'y',
`last_used` = NOW(),
`id` = LAST_INSERT_ID(`id`)
wo der Wert 10.3.100.244
nicht bereits in der Tabelle vorhanden ist. Es ergibt sich:
ERROR 1062 (23000): Duplicate entry '253691' for key 'PRIMARY'
Auswahl der LAST_INSERT_ID
gibt:
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 0 |
+------------------+
Wenn das nicht schon seltsame Verhalten war; Ich werde versuchen, einen bereits vorhandenen IP-Eintrag einzufügen:
mysql> INSERT INTO `ipstats` (`ip`, `last_used`) VALUES ('10.204.102.38', NOW()) ON DUPLICATE KEY UPDATE `online` = 'y', `last_used` = NOW(), `id` = LAST_INSERT_ID(`id`);
ERROR 1062 (23000): Duplicate entry '253691' for key 'PRIMARY'
Ich bin jetzt offiziell bei diesem Verhalten von MySQL ratlos. Alle anderen Abfragen funktionieren in allen anderen Prozessen, die ausgeführt werden. Der Fehler tritt nur auf, wenn ich versuche, INSERT
zu der ipstats
Tabelle. Ich habe sogar folgendes versucht:
mysql> UPDATE ipstats
SET `online` = 'n',
`last_used` = NOW(),
`id` = LAST_INSERT_ID(`id`)
WHERE ip = '10.204.102.38';
Affected rows: 1 Found rows: 0 Warnings: 0 Duration for 1 query: 0.000 sec.
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 253690 |
+------------------+
Affected rows: 0 Found rows: 1 Warnings: 0 Duration for 1 query: 0.000 sec.
mysql> INSERT INTO `ipstats` (`ip`, `last_used`)
VALUES ('10.204.102.38', NOW())
ON DUPLICATE KEY UPDATE
`online` = 'y',
`last_used` = NOW(),
`id` = LAST_INSERT_ID(`id`);
Error 1062 (23000): Duplicate entry '253691' for key 'PRIMARY'
Was könnte das Problem sein? Wie kann ich das beheben? Der Fehler ist seit heute Nachmittag aufgetreten und ich hatte noch nie zuvor ein solches Problem.
P.S.: Der Fehler tritt bei allen Benutzerkonten in meiner MySQL-Installation auf. Es gibt 4 Benutzer (einschließlich root), die auf die Datenbank zugreifen können. Keine von ihnen ist in der Lage, die INSERT
Abfrage durchzuführen.
+1 für die angegebenen Informationen. –
Was soll das erreichen? 'id = LAST_INSERT_ID (id)' –
Noch denke ich, dass Sie die ID = LAST_INSERT_ID (id) entfernen sollten, wie ich in meiner Antwort hatte, was ich entfernte .. –