mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Di 23.04.2024 20:35 Benutzername: Passwort: Auto-Login

Thema: [MySQL] Zwei zeitgleiche INSERTs mit SQL Performance vom 09.11.2006


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [MySQL] Zwei zeitgleiche INSERTs mit SQL Performance
Autor Nachricht
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht: Männlich
Verfasst Do 09.11.2006 09:19
Titel

[MySQL] Zwei zeitgleiche INSERTs mit SQL Performance

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
schachbrett

Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht: Männlich
Verfasst Do 09.11.2006 11:45
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Anzeige
Anzeige
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht: Männlich
Verfasst Do 09.11.2006 12:20
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
schachbrett

Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht: Männlich
Verfasst Do 09.11.2006 12:40
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht: Männlich
Verfasst Do 09.11.2006 14:26
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
schachbrett

Dabei seit: 11.10.2006
Ort: Köln
Alter: -
Geschlecht: Männlich
Verfasst Sa 11.11.2006 02:14
Titel

Antworten mit Zitat Zum Seitenanfang

Hmm, scheinst Recht zu haben - LAST_INSERT_ID() liefert dir den letzten AUTO_INCREMENT-Wert bei deiner bestehenden Datenbankverbindung. Vergiss meinen Quatsch... Lächel

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() );
  View user's profile Private Nachricht senden
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.