Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von Februar

SELFHTML Forumsarchiv
Relationales INSERT

Informationsseite
  1. Seite (DATENBANK) Relationales INSERT von lixx, 28. 02. 2007, 10:36
nach unten

Relationales INSERT

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

nach obennach unten

Relationales INSERT

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

nach obennach unten

Relationales INSERT

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

nach obennach unten

Relationales INSERT

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

nach obennach unten

Relationales INSERT

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.

nach obennach unten

Relationales INSERT

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?

nach obennach unten

Relationales INSERT

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

nach obennach unten

Relationales INSERT

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";

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von Februar

© 1998-2006 Seite Impressum, Software: Classic Forum