![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: lixx, 28. 02. 2007, 10:36
Guten Morgen!
Gibt es eine Möglichkeit bei MySQL einen Relationalen INSERT-Befehl auszuführen?
Angenommen ich habe zwei Tabellen. Adressen und Gruppen und eine Adresse kann Mehrere Gruppen beinhalten. Jetzt habe ich eine dritte MN-Tabelle die beide miteinander verknüpft.
Lege ich nun eine Adresse an die mehreren Gruppen zugeordnet ist, dann macht man das ja über INSERTs.
INSERT INTO A ( vorname, nachname ) VALUES ( 'max', 'muster' );
INSERT INTO AG ( Aid, Gid ) VALUES
( LAST_INSERT_ID(), 1 ),
( LAST_INSERT_ID(), 2 ),
( LAST_INSERT_ID(), 3 );
// Ob das so mit "LAST_INSERT_ID()" funktioniert, weiß ich nicht ...
Gibt es da keinen besseren Befehl? Ich habe schon gegoogelt, habe aber nicht mal eine Ahnung, wonach ich dabei googeln soll.
Bitte um Hilfe.
lg lixx
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 28. 02. 2007, 12:20
Hallo lixx,
»» Gibt es eine Möglichkeit bei MySQL einen Relationalen INSERT-Befehl auszuführen?
leider habe ich keine Ahnung was ein "Relationaler INSERT-Befehl" sein soll. Ich habe diesen Begriff vorher noch nie gelesen.
»» Lege ich nun eine Adresse an die mehreren Gruppen zugeordnet ist, dann macht man das ja über INSERTs.»» INSERT INTO A ( vorname, nachname ) VALUES ( 'max', 'muster' );
»»
»» INSERT INTO AG ( Aid, Gid ) VALUES
»» ( LAST_INSERT_ID(), 1 ),
»» ( LAST_INSERT_ID(), 2 ),
»» ( LAST_INSERT_ID(), 3 );
»»
»» // Ob das so mit "LAST_INSERT_ID()" funktioniert, weiß ich nicht ...
-- Zeilenkommentare in SQL mit zweifachem Minus-Zeichen.
-- das versteht jedes mir bekannte DBMS
/* Kommentarbereiche wie z.B. in C so wie
in diesen beiden Zeilen :-) */
-- solche Kommentare leider nicht jedes (ich glaube, DB2 versteht das nicht).
-- // habe ich bei SQL noch nie als Kommentar gesehen,
-- vielleicht versteht das ja ein DBMS
»» Gibt es da keinen besseren Befehl?
Gegebenenfalls kann Dir die INSERT ... SELECT-Syntax weiterhelfen. MySQL 5.x vorausgesetzt könntest Du die zusammengehörenden INSERT-Statements in eine Stored Procedure packen.
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: lixx, 28. 02. 2007, 13:09
»» »» Gibt es eine Möglichkeit bei MySQL einen Relationalen INSERT-Befehl auszuführen?
»»
»» leider habe ich keine Ahnung was ein "Relationaler INSERT-Befehl" sein soll. Ich habe diesen Begriff vorher noch nie gelesen.
Naja, ob das so heißt weiß ich auch nicht. Wahrscheinlich nicht ;)
Bin aber bereits weiter gekommen:INSERT INTO A ( vorname, nachname ) VALUES ( 'max', 'muster' );
SELECT @lid := LAST_INSERT_ID();
INSERT INTO AG ( Aid, Gid ) VALUES
( @lid, 1 ),
( @lid, 2 ),
( @lid, 3 );
»» »» // Ob das so mit "LAST_INSERT_ID()" funktioniert, weiß ich nicht ...
»» -- Zeilenkommentare in SQL mit zweifachem Minus-Zeichen.
... war kein Kommentar von MySQL - aber egal, danke.
»» Gegebenenfalls kann Dir die INSERT ... SELECT-Syntax weiterhelfen. MySQL 5.x vorausgesetzt könntest Du die zusammengehörenden INSERT-Statements in eine Stored Procedure packen.
Habe leider nur MySQL 4.1. Soweit ich mich bereits vorgearbeitet habe, gibt es aber nicht soetwas was ich mir vorstelle.
lg lixx
Die folgende Nachricht zum Thema stammt von: lixx, 28. 02. 2007, 14:26
»» Bin aber bereits weiter gekommen:
»»
»» »» INSERT INTO A ( vorname, nachname ) VALUES ( 'max', 'muster' );
»» SELECT @lid := LAST_INSERT_ID();
»» INSERT INTO AG ( Aid, Gid ) VALUES
»» ( @lid, 1 ),
»» ( @lid, 2 ),
»» ( @lid, 3 );
»»
Habe aber nun leider damit mit LAST_INSERT_ID() ein Problem. Sie gibt mir 0 zurück.INSERT INTO A ( id ) VALUES ( NULL );
SELECT LAST_INSERT_ID( );
--> 0
Das ist die Tabelle A:CREATE TABLE `A` (
`id` int(11) unsigned NOT NULL auto_increment,
...,
PRIMARY KEY (`id`),
KEY `pid` (`pid`,`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11141;
Kann mir dabei bitte jemand helfen?
lg lixx
Die folgende Nachricht zum Thema stammt von: lixx, 28. 02. 2007, 15:29
Zur Ergänzung, folgendes funktioniert auch:INSERT INTO A ( id ) VALUES ( NULL );
INSERT INTO A ( id ) VALUES ( LAST_INSERT_ID()+10 );
--> id: 52
--> id: 62
Daher kann ich mir nicht erklären, woran es liegt.
Die folgende Nachricht zum Thema stammt von: lixx, 28. 02. 2007, 15:43
Ich glaube die Lösung gefunden zu haben:INSERT INTO A ( id ) VALUES ( NULL );
SELECT @id := id FROM A WHERE id = LAST_INSERT_ID();
SELECT @id;
--> id: 82
Ich stelle mir nur die Frage, warum SELECT LAST_INSERT_ID(); nicht funzt?
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 01. 03. 2007, 13:03
Hallo
»» Habe aber nun leider damit mit LAST_INSERT_ID() ein Problem. Sie gibt mir 0 zurück.
»»
»» »» INSERT INTO A ( id ) VALUES ( NULL );
»» SELECT LAST_INSERT_ID( );
Laut MySQL-Handbuch sollte dieses INSERT fehlschlagen.
http://dev.mysql.com/doc/refman/4.1/en/insert.html, schau Dir den Abschnitt zu
Inserting NULL into a column that has been declared NOT NULL
an. Praxistests haben allerdings ergeben, dass der Datensatz dennoch angelegt wird. Es ist natürlich eine fürchterlich schlechte Praxis, für diesen Wert, den Du nicht kennst den speziellen Wert NULL anzugeben.
a) Lass die Spalte einfach weg, es wird der Defaultwert genommen
b) MySQL 4.1 und höher vorausgesetzt: Verwende DEFAULT statt NULL.
»» Das ist die Tabelle A:
»»
»» »» CREATE TABLE `A` (
»» `id` int(11) unsigned NOT NULL auto_increment,
»» ...,
»» PRIMARY KEY (`id`),
»» KEY `pid` (`pid`,`email`)
»» ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11141;
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: dedlfix, 01. 03. 2007, 13:22
echo $begrüßung;
»» »» INSERT INTO A ( id ) VALUES ( NULL );
»»
»» Laut MySQL-Handbuch sollte dieses INSERT fehlschlagen.
Nein, sollte es nicht.
»» http://dev.mysql.com/doc/refman/4.1/en/insert.html, schau Dir den Abschnitt zu
»»
»» Inserting NULL into a column that has been declared NOT NULL
»»
»» an. Praxistests haben allerdings ergeben, dass der Datensatz dennoch angelegt wird.
Ja, denn wegen der Deklaration als auto_increment
»» »» CREATE TABLE `A` (
»» »» `id` int(11) unsigned NOT NULL auto_increment,
trifft nun das unter CREATE TABLE beschriebene Verhalten zu:
When you insert a value of NULL (recommended) or 0 into an indexed AUTO_INCREMENT column, the column is set to the next sequence value.
echo "$verabschiedung $name";
© 1998-2006
Impressum, Software: Classic Forum