inserts verbinden
JLock
- datenbank
Hi,
ich verwende mySQL 5.0 und habe eine Frage.
Ich füge auf folgende Art und Weise mehrere Datensätze in eine Datenbank ein:
INSERT INTO keywords (word, name, found) VALUES ... ON DUPLICATE KEY UPDATE found='$now'
Dabei handelt es sich in der Regel um mehrere Hundert Datensätze, die in einem Rutsch eingefügt werden.
Nun muss ich ebenfalls jedes mal nach diesen Inserts die IDs in eine weitere Tabelle einfügen, um sie mit Daten (das Feld server) aus einer andere Tabelle zu verbinden:
INSERT INTO blablubb (keyword_id, server, found) VALUES ... ON DUPLICATE KEY UPDATE found='$now'
Hierbei entspricht die keyword_id einer id aus dem zuvor ausgeführten INSERT.
Das Feld server wird mit einem für diesen INSERT-Befehl konstanten Wert belegt.
Meine Frage ist nun, ob ich die beiden Inserts in ein einziges SQL-Kommando packen kann, um unnötig viele Datenbank-Requests zu verhindern.
Ich möchte möglichst verhindern, dass ich zunächst die Datensätze einfüge, dann die IDs der Datensätze hole und dann den 2. INSERT-Befehl ausführe.
Mit freundlichen Grüßen,
JLock
Hi!
Meine Frage ist nun, ob ich die beiden Inserts in ein einziges SQL-Kommando packen kann, um unnötig viele Datenbank-Requests zu verhindern.
Es gibt Stored Procedures und Trigger. Mit denen kann man mehrere Statements mit einem Aufruf ausführen lassen.
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-views.html
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-compound-statements.html
Lo!
Es gibt Stored Procedures und Trigger. Mit denen kann man mehrere Statements mit einem Aufruf ausführen lassen.
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-views.html
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-compound-statements.html
Ich habe die Links eben mal ein wenig durchgeschaut.
So wie ich das verstanden habe, handelt es sich dabei (ganz grob gesagt) um die Kombination mehrerer SQL-Statements.
Das ist schon ganz praktisch. Allerdings müsste ich ja irgendwie an die IDs der eingefügten/upgedateten Datensätze kommen, um den nächsten SQL-Befehl ausführen zu können. Und das ist derzeit mein größtes Problem, wie ich gerade feststellen musste :-)
Ich habe die Links eben mal ein wenig durchgeschaut.
So wie ich das verstanden habe, handelt es sich dabei (ganz grob gesagt) um die Kombination mehrerer SQL-Statements.Das ist schon ganz praktisch. Allerdings müsste ich ja irgendwie an die IDs der eingefügten/upgedateten Datensätze kommen, um den nächsten SQL-Befehl ausführen zu können. Und das ist derzeit mein größtes Problem, wie ich gerade feststellen musste :-)
Also die beste Idee, die ich bisher hatte, war einen Trigger für INSERT/UPDATE zu basteln, der entsprechend den 2. INSERT vornimmt.
Dann müsste ich allerdings die serverid mit in den ersten INSERT reinnehmen, damit sie dem Trigger bekannt ist. Allerdings gehört sie da nicht rein :'(
Hi!
So wie ich das verstanden habe, handelt es sich dabei (ganz grob gesagt) um die Kombination mehrerer SQL-Statements.
Das ist quasi SQL, um Programme ausführen zu können.
Das ist schon ganz praktisch. Allerdings müsste ich ja irgendwie an die IDs der eingefügten/upgedateten Datensätze kommen, um den nächsten SQL-Befehl ausführen zu können. Und das ist derzeit mein größtes Problem, wie ich gerade feststellen musste :-)
Wenn es sich um auto_increment-Werte handelt, so liefert diese die Funktion LAST_INSERT_ID(). Ansonsten kann ein Trigger mit NEW.feldname und OLD.feldname auf die Feldwerte zugreifen.
Lo!