Hallo zusammen,
ich habe in meiner MariaDB eine Kundentabelle in der automatisch bei jedem INSERT die Kundennummer einfach um 1 erhöht werden soll. Bisher hatte ich das einfach über ein AUTO_INCREMENT gelöst. Jetzt habe ich aber das Problem, dass ich die DB minütlich mit dem CRM-System synchronisiere und bei jedem Sync das AUTO_INCREMENT aus mir nicht ersichtlichen Gründen um 1 erhöht wird, wodurch die Kundennummer unerwünschterweise mit jeder Stunde um 60 höher werden, auch wenn kein Kunde hinzugefügt wurde. Das ist natürlich suboptimal. Daher wollte ich die Nummer selbst hochzählen. Aber alle Varianten, die ich eingesetzt habe, haben Fehler geworfen.
Info dazu: Ich verwende MariaDB in einem Docker Container (1:10.10.3+maria~ubu2204) und programmiere mit TypeScript. Das Ganze läuft dann unter nodeJS 18 und verwendet wird das mariadb npm package 3.1.0. Die SQL-Statements sind Prepared Statements.
1) INSERT INTO customers ( ... )
SELECT MAX(customer_id) + 1, ... FROM customers
ON DUPLICATE KEY UPDATE ...;
führt zu einem HY000 "This command is not supported in the prepared statement protocol yet" Error.
2) INSERT INTO customers ( ... )
VALUES ((SELECT MAX(customer_id) + 1 FROM customers), ... )
ON DUPLICATE KEY UPDATE ...;
löst einen "Table 'contacts' is specified twice, both as a target for 'INSERT' and as a separate source for data" Fehler aus.
3) Wie schon beschrieben funktioniert die AUTO_INCREMENT Variante zwar, zählt aber auch hoch, wenn gar kein INSERT stattfindet.
Habt ihr noch Ideen, was man noch machen könnte?
Vielen Dank schonmal im Voraus!
Markus
ich habe in meiner MariaDB eine Kundentabelle in der automatisch bei jedem INSERT die Kundennummer einfach um 1 erhöht werden soll. Bisher hatte ich das einfach über ein AUTO_INCREMENT gelöst. Jetzt habe ich aber das Problem, dass ich die DB minütlich mit dem CRM-System synchronisiere und bei jedem Sync das AUTO_INCREMENT aus mir nicht ersichtlichen Gründen um 1 erhöht wird, wodurch die Kundennummer unerwünschterweise mit jeder Stunde um 60 höher werden, auch wenn kein Kunde hinzugefügt wurde. Das ist natürlich suboptimal. Daher wollte ich die Nummer selbst hochzählen. Aber alle Varianten, die ich eingesetzt habe, haben Fehler geworfen.
Info dazu: Ich verwende MariaDB in einem Docker Container (1:10.10.3+maria~ubu2204) und programmiere mit TypeScript. Das Ganze läuft dann unter nodeJS 18 und verwendet wird das mariadb npm package 3.1.0. Die SQL-Statements sind Prepared Statements.
1) INSERT INTO customers ( ... )
SELECT MAX(customer_id) + 1, ... FROM customers
ON DUPLICATE KEY UPDATE ...;
führt zu einem HY000 "This command is not supported in the prepared statement protocol yet" Error.
2) INSERT INTO customers ( ... )
VALUES ((SELECT MAX(customer_id) + 1 FROM customers), ... )
ON DUPLICATE KEY UPDATE ...;
löst einen "Table 'contacts' is specified twice, both as a target for 'INSERT' and as a separate source for data" Fehler aus.
3) Wie schon beschrieben funktioniert die AUTO_INCREMENT Variante zwar, zählt aber auch hoch, wenn gar kein INSERT stattfindet.
Habt ihr noch Ideen, was man noch machen könnte?
Vielen Dank schonmal im Voraus!
Markus