🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.datenbanken.mysql
5 messages
5 total messages Started by Fabian Thu, 04 May 2023 16:21
Aus 2 mach 1?
#79946
Author: Fabian
Date: Thu, 04 May 2023 16:21
39 lines
1291 bytes
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
Re: Aus 2 mach 1?
#79947
Author: "Peter J. Holzer
Date: Thu, 04 May 2023 18:05
44 lines
1418 bytes
On 2023-05-04 14:21, Fabian <fabi1969@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
Re: Aus 2 mach 1?
#79948
Author: Andreas Horn
Date: Wed, 10 May 2023 09:32
27 lines
1461 bytes
Am 04.05.23 um 18:05 schrieb Peter J. Holzer:
> On 2023-05-04 14:21, Fabian <fabi1969@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
Re: Aus 2 mach 1?
#79949
Author: "Peter J. Holzer
Date: Thu, 11 May 2023 00:55
18 lines
879 bytes
On 2023-05-10 07:32, Andreas Horn <andreas@andreashorn.de> wrote:
> Am 04.05.23 um 18:05 schrieb Peter J. Holzer:
>> On 2023-05-04 14:21, Fabian <fabi1969@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
Re: Aus 2 mach 1?
#79950
Author: Andreas Horn
Date: Fri, 12 May 2023 12:00
28 lines
1093 bytes
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:
> On 2023-05-10 07:32, Andreas Horn <andreas@andreashorn.de> wrote:
>> Am 04.05.23 um 18:05 schrieb Peter J. Holzer:
>>> On 2023-05-04 14:21, Fabian <fabi1969@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
>
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads