Halihallo Andreas
Dies wird als Zahl behandelt, wenn der Spaltentyp einen Zahlentyp ist und wird als String behandelt, wenn es ein Stringtyp (CHAR) ist. Also, du wirst keine Probleme haben, wenn du den Spaltentyp auf einen geeigneten CHAR setzt (dir ist aber klar, dass du hier mit 4 Bytes nur 10000 Records ansprechen kannst; anders als INT - Werte).
??? Verstehe ich nicht. Wie meinst Du das?
CHAR ist ja ein String. Also, wenn du vier Bytes für den CHAR reservierst, kannst du nur die Zahlen '0000' bis '9999' speichern; '10000' bräuchte ja schon 5 Bytes. Anders bei Integern, da kannst du auf 4 Bytes natürlich 2^32 Zahlen "schreiben". Beim speichern von Zahlen in Strings benutzt du ja nur 10 von 256 möglichen Zeichen.
OK. Verstehe. Dein pseudo-INSERT kannst du übrigens dennoch vollständig durch die DB erstellen:
nach jedem Insert...
UPDATE table SET ID=CONCAT(HerkunftsID, '-', ClientID) WHERE ID=0
Aber geht denn nichz sowas wie
INSERT INTO table SET ID=CONCAT(HerkunftsID, '-', ClientID)???
Nein, da zum Zeitpunkt des Insert's noch gar keine HerkunftsID und ClientID definiert ist, die werden ja erst _während_ dem Insert "bekannt".
Das mir am liebsten! Aber da ich das eh in e ine Funktion packe soll mir das auch recht sein, nur sollte Deine VErsion wohl besser so aussehen:
INSERT INTO table SET Vorname='Franz-Joseph';
UPDATE table SET ID=CONCAT(HerkunftsID, '-', ClientID) WHERE ID=LAST_INSERT_ID();
oder?
Ich glaube, dass dies keine Probleme geben sollte. Probleme gäbe es, wenn LAST_INSERT_ID nicht Sessionabhängig wäre; müsstest du in der Doku nachschlagen. Das Problem wäre:
Wenn zwischen dem INSERT und UPDATE noch ein INSERT aus einem anderen Prozess stattfinden würde, und last-insert-id nicht sessionabhängigwäre, würdest du die neue ID des insert's des anderen Threads ändern und gar nicht den, den du ändern möchtest. Wenn jedoch die last_insert_id Sessionabhängig wäre (was ich glaube), dann hast du keine Probleme, da sich der update in jedem Fall auf den vorherigen insert bezieht. Mit ID=0 bist du auf jeden Fall auf dem sicheren Pfad und mit Index sogar noch einigermassen Performant. Wenn es jedoch keinen grossen Arbeitsaufwand bedeutet würde ich deine Version natülich auch bevorzugen.
Viele Grüsse
Philipp