Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Aus 2 mach 1?

1 view
Skip to first unread message

Fabian

unread,
May 4, 2023, 10:21:28 AM5/4/23
to
Hallo Leute,

gibt es eine Möglichkeit, mehrere SQL-Befehle in einem einzigen Befehl
unterzubringen?

Beispiel:
In einer Datenbank gibt es zwei Tabellen.
Tabelle 1 für Personenstammdaten
Tabelle 2 für weitergehende Daten

Personenstammdaten z. B. Name, Vorname, Straße, PLZ und Ort
weitergehende Daten z. B. Geburtsdatum, Bankverbindung, familienstand

Bisherige SQL-Befehle:

INSERT INTO tabelle1 VALUES(ID, name, vorname, strasse, plz, ort)
und
INSERT INTO tabelle2 VALUES(ID, geburtsdatum, bankverbindung, familienstand)


Es wurden 2 Tabellen genutzt, weil ein User nur die Daten der Tabelle1
sehen darf und ein anderer User die Daten beider Tabellen (ist nicht auf
meinen Mist gewachsen).

Immer, wenn ein neuer Eintrag hinzugefügt wird, bedarf es aber nun 2
SQL-Befehle. Gibt es eine Möglichkeit, beide SQL-Befehle in einem Befehl
unterzubringen?

Vielleicht in etwa so?
INSERT INTO tabelle1 VALUES(ID, name, vorname, strasse, plz, ort), INTO
tabelle2 VALUES(ID, geburtsdatum, bankverbindung, familienstand)

Das war jetzt nur exemplarisch, in der Realität handelt es sich sogar um
4 Tabellen, also 4 SQL-Befehle beim Hinzufügen eines neuen Eintrages.

Hat jemand eine Idee, außer alle Tabellen neu zu strukturieren und nur
eine Tabelle daraus zu machen?

'Gruß
Heiko

Peter J. Holzer

unread,
May 4, 2023, 12:05:50 PM5/4/23
to
On 2023-05-04 14:21, Fabian <fabi...@mail.net> wrote:
> gibt es eine Möglichkeit, mehrere SQL-Befehle in einem einzigen Befehl
> unterzubringen?
>
> Beispiel:
> In einer Datenbank gibt es zwei Tabellen.
> Tabelle 1 für Personenstammdaten
> Tabelle 2 für weitergehende Daten
>
> Personenstammdaten z. B. Name, Vorname, Straße, PLZ und Ort
> weitergehende Daten z. B. Geburtsdatum, Bankverbindung, familienstand
>
> Bisherige SQL-Befehle:
>
> INSERT INTO tabelle1 VALUES(ID, name, vorname, strasse, plz, ort)
> und
> INSERT INTO tabelle2 VALUES(ID, geburtsdatum, bankverbindung, familienstand)
>
>
> Es wurden 2 Tabellen genutzt, weil ein User nur die Daten der Tabelle1
> sehen darf und ein anderer User die Daten beider Tabellen (ist nicht auf
> meinen Mist gewachsen).

Durchaus eine sinnvolle Organisation.


> Immer, wenn ein neuer Eintrag hinzugefügt wird, bedarf es aber nun 2
> SQL-Befehle.

Ja, und? Wo ist das Problem?

> Gibt es eine Möglichkeit, beide SQL-Befehle in einem Befehl
> unterzubringen?

Ich würde das nicht machen. Ich sehe keinen Vorteil darin, zwei Tabellen
mit einem Befehl zu befüllen. Wenn es Dir um Atomizität geht: Dafür sind
Transaktionen da.

In PostgreSQL könnte man ein INSERT ... RETURNING in einer WITH-Clause
unterbringen. So wie ich die Doku verstehe, ist da bei MySQL aber nur
SELECT erlaubt.

Bleibt IMHO nur die Möglichkeit, eine Stored Procedure zu schreiben.

hp

Andreas Horn

unread,
May 10, 2023, 3:35:04 AM5/10/23
to
Am 04.05.23 um 18:05 schrieb Peter J. Holzer:
> On 2023-05-04 14:21, Fabian <fabi...@mail.net> wrote:
>> gibt es eine Möglichkeit, mehrere SQL-Befehle in einem einzigen Befehl
>> unterzubringen?
>> Tabelle 1 für Personenstammdaten
>> Tabelle 2 für weitergehende Daten
>> INSERT INTO tabelle1 VALUES(ID, name, vorname, strasse, plz, ort)
>> INSERT INTO tabelle2 VALUES(ID, geburtsdatum, bankverbindung, familienstand)
>> Es wurden 2 Tabellen genutzt, weil ein User nur die Daten der Tabelle1
>> sehen darf und ein anderer User die Daten beider Tabellen
Kannst du durch 2 verschiedene SELECT in einer Tabelle machen
> Stored Procedure schreiben
ist noch eine Möglichkeit bei 2 Tabellen.

Ich hatte mal ein ähnliches Problem beim Zugriff über html. Dort habe
ich before und after Trigger geschrieben und ein Zählfeld eingerichtet,
da über den Webbrowser nicht gesichert war, dass folgendes Problem auftritt:
- 1. user öffnet einen Datensatz und wartet
- 2. user öffnet denselben Datensatz und ändert ihn
- 1. user berschreibt jetzt diesen Datensatz
Damit ist die Änderung durch den 2. user weg...
Mit einem before Trigger kannst du den Zähler auslesen und wenn du
schreibst den Zähler auf den alten Wert prüfen. hat er sich nicht
geändert schreibst du mit dem after Trigger und inkrementierst den
Zähler gleichzeitig. Falls der Zähler nicht mehr de alten Wert hat, wird
das Schreiben mit einer geeigneten Fehlermeldung abgebrochen.

LG Andreas

Peter J. Holzer

unread,
May 10, 2023, 6:57:28 PM5/10/23
to
On 2023-05-10 07:32, Andreas Horn <and...@andreashorn.de> wrote:
> Am 04.05.23 um 18:05 schrieb Peter J. Holzer:
>> On 2023-05-04 14:21, Fabian <fabi...@mail.net> wrote:
>>> gibt es eine Möglichkeit, mehrere SQL-Befehle in einem einzigen Befehl
>>> unterzubringen?
>>> Tabelle 1 für Personenstammdaten
>>> Tabelle 2 für weitergehende Daten
>>> INSERT INTO tabelle1 VALUES(ID, name, vorname, strasse, plz, ort)
>>> INSERT INTO tabelle2 VALUES(ID, geburtsdatum, bankverbindung, familienstand)
>>> Es wurden 2 Tabellen genutzt, weil ein User nur die Daten der Tabelle1
>>> sehen darf und ein anderer User die Daten beider Tabellen
> Kannst du durch 2 verschiedene SELECT in einer Tabelle machen

1. Wie macht man (in MySQL) ein INSERT mit einem SELECT?

2. Er will ja nur eine Query haben. Zwei SELECTs sind für ihn also keine
Verbesserung gegenüber zwei INSERTs.

hp

Andreas Horn

unread,
May 12, 2023, 6:02:26 AM5/12/23
to
Hallo Peter,

ich wollte ja nur auf die Verwendbarkeit von Triggern aufmerksam machen,
damit gehen extrem viele Dinge.

LG Andreas

Am 11.05.23 um 00:55 schrieb Peter J. Holzer:
0 new messages