Autor |
Nachricht |
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 09.11.2006 09:19
Titel [MySQL] Zwei zeitgleiche INSERTs mit SQL Performance |
|
|
Hallo zusammen,
ich möchte zwei INSERT kurz hintereinander in zwei unteschiedlich Tabellen laufen lassen. Nur möchte ich ganz sicher gehen das die zwei Tabellen nachher bei einer SELECT LEFT JOIN sauber "verknüpft" werden hand einer ID (cpy_id) die beide AUTO_INCREMENT sind. Jetzt hab ich mich da schon bei Google und sätmlichen quellen informiert wie man das am besten irgendwie löst und vorallem mit wenig performance verlust, sprich auf seiten von MySQL (Tabellen soll mal rund 560.000 Säte verwalten.
Lösung die ich gefunden habe ist mit LAST_INSERT_ID(), nur leider kann ich garnix damit anfangen. Ach ja, Gesteuert wird das ganze über ein PHP-Skript wobei ich das nich in PHP lösen möchte wie gesagt wegen der Performance
Folgende Satements habe ich aber irengdwie funzt es nicht...
Code: | mysql_query("INSERT INTO company(cpy_name,cpy_skey) VALUES ($cpy_name,$cpy_skey)");
mysql_query ("SELECT LAST_INSERT_ID()");
mysql_query("INSERT INTO company_info(cpy_uri,cpy_add_time) VALUES ('$cpy_uri',NOW())");
|
das nächste witzige is die geschichte mit dem LAST_INSERT_ID() wenn ich diese Funktion bei PHPmyAdmin eingeben bekomme ich einen wert zurück, wenn ich dagegen das ganze im MySQL Query Browser eingebe erhalte ich lediglich eine null. Ich denke das es daran liegt das in dieser Funktion keine Tabelle fesgelegt worden ist...gibts da irgendeine Möglichkeit
wäre für eine schnelle Antwort dankbar
.momai
Zuletzt bearbeitet von momai am Do 09.11.2006 09:24, insgesamt 1-mal bearbeitet
|
|
|
|
|
schachbrett
Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht:
|
Verfasst Do 09.11.2006 11:45
Titel
|
|
|
Du nimmst zwei Auto_Increment-IDs, willst die eine aber manuell hochzaehlen???
Wenn ich dich richtig verstehe, waere es sinnvoller, company und company_info in eine Tabelle zu packen. Damit vermeidest du automatisch dein Konsistenzproblem und es gibt -mE- keinen Grund, warum diese doch untrennbare 1:1 Beziehung zwangsgeschieden wird!
Gruss
|
|
|
|
|
Anzeige
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 09.11.2006 12:20
Titel
|
|
|
schachbrett hat geschrieben: | Du nimmst zwei Auto_Increment-IDs, willst die eine aber manuell hochzaehlen??? |
geht das nicht? muss ich einen AUTO_INCREMENT_ID von den beiden raus nehmen damit es funktioniert?
schachbrett hat geschrieben: |
Wenn ich dich richtig verstehe, waere es sinnvoller, company und company_info in eine Tabelle zu packen. Damit vermeidest du automatisch dein Konsistenzproblem und es gibt -mE- keinen Grund, warum diese doch untrennbare 1:1 Beziehung zwangsgeschieden wird!
|
Ja aber ich will die ja garnicht zusammenwerfen, da sich die tabellen eh demnächst auf zwei server verteilen, und dann is des Problem nicht gelöst...hast keine Lösung auf Basis von MySQL damit ich sicher gehen kann das ich immer zwei gleiche IDs habe?
.momai
|
|
|
|
|
schachbrett
Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht:
|
Verfasst Do 09.11.2006 12:40
Titel
|
|
|
Es gibt doch keinen Sinn; entweder mySQL zaehlt, oder du! D.h, wenn du zaehlst, nimm ein AUTO_INCREMENT raus. Wenn du LAST_INSERT_ID() nimmst, musst du sicher sein, dass deine beiden Tabellen atomar (zB. per Transaktion) eingefuegt werden -- sonst kannst du eine falsche ID bekommen!
Wieviele Tabellen du anlegst, ist ja nicht deine Frage gewesen... vielleicht + scheinbar hast du da doch noch nen Grund fuer...
Ich wuerd dein Problem so loesen: 1) company (mit autoinc) einfuegen 2) select cpy_id from company where... 3) company_info (ohne autoinc) einfuegen.
|
|
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 09.11.2006 14:26
Titel
|
|
|
ok aber punkt zwei is doch nicht so rosig...
ist da dann nicht die Funktion LAST_INSERT_ID() oder MAX_ID() gefragt bzw vernüftiger...?
.momai
|
|
|
|
|
schachbrett
Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht:
|
Verfasst Sa 11.11.2006 02:14
Titel
|
|
|
Hmm, scheinst Recht zu haben - LAST_INSERT_ID() liefert dir den letzten AUTO_INCREMENT-Wert bei deiner bestehenden Datenbankverbindung. Vergiss meinen Quatsch...
Also sollte es doch so funktionieren:
company mit, company_info OHNE AUTO_INCREMENT
1) INSERT INTO company...;
2) INSERT INTO company_info(cpy_uri, cpy_add_time, cpy_id) VALUES ( $cpy_uri, NOW(), LAST_INSERT_ID() );
|
|
|
|
|
|
|
|
Ähnliche Themen |
zwei membereiche fusionieren [mysql|php]
[mysql] zwei usertabellen zusammen
PHP / MYSQL Daten in zwei Tabellenspalten ausgeben
Zwei kleine Probleme bzw Fragen zu MySQL
[MySQL] Zwei Datenbanken gleichzeitig abfragen
[MySQL] Ausgabe nach zwei Feldern orden
|
|