Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
mySQL: Bedingtes INSERT INTO
dahaack
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

mySQL: Bedingtes INSERT INTO

beantworten | zitieren | melden

verwendetes Datenbanksystem: mySQL

Hallo,

in meiner Datenbank soll der Benutzer seinen Benutzernamen ändern können. Allerdings soll der Benutzername dabei nicht einfach überschrieben werden, sondern alle vorherigen Benutzernamen und der Zeitpunkt der Änderungen gespeichert werden.
CREATE TABLE tableUser (
	id INT NOT NULL AUTO_INCREMENT,
	password VARCHAR(24),
	PRIMARY KEY(id)
);


CREATE TABLE tableUserName (
	id INT NOT NULL AUTO_INCREMENT,
	userId INT NOT NULL,
	name CHAR(48),
	startdate DATETIME,
	PRIMARY KEY(id),
	FOREIGN KEY (userId) REFERENCES tableUser(id)
);

In der Benutzertabelle wird also nur das Passwort abgespeichert, in der Benutzernamentabelle wird der Name und der Zeitpunkt, wann dieser Name erstellt wurde abgespeichert.

Wenn also ein neuer Benutzer erstellt (oder ein Benutzername gewechselt) wird, ist das ganze nur erlaubt, wenn kein Benutzer den neuen Namen zur Zeit verwendet. Über ein bedingtes Einfügen hab ich im Netzt nicht so wirklich was gefunden. Wie kann man das realisieren (gerne auch für ein anderes Datenbanksystem, das mySQL-Äquivalente sollte ich dabei rausfinden können).


Vielen Dank schonmal!
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Hi...

gib "name" einen UNIQUE-KEY.

Da wird eine Exception geworfen wenn versucht wird einen Namen ein 2. Mal einzufügen.

lg
private Nachricht | Beiträge des Benutzers
dahaack
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Hallo [email protected],

vielen Dank für deine Antwort und entschuldige bitte, dass ich noch ein paar Infos vorenthalten habe.

Das UNIQUE habe ich auch schon gefunden, ist an dieser Stelle aber nicht das was ich brauche. Wenn ein Benutzername geändert wurde, darf der alte Benutzername wieder vergeben werden.

Eine IF-Abfrage ist anscheinend nur mit dem SELECT Befehl kombinierbar.
Ablaufsteuerungsfunktionen
INSERT

Die Abfrage ist etwas länger und verschachtelt, daher braucht ihr mir natürlich nicht die komplette Abfrage vordiktieren, sondern es reicht mir vollkommen, wenn ich weiß, wie eine Abfrage bedingt stattfinden kann.

Ich könnte die Abfrage natürlich auch erstmal auf dem übergeordneten Anwendungsprogramm stattfinden lassen, allerdings könnte dann der sehr unwahrscheinliche Fall eintreten, dass zwei Leute gleichzeitig einen neuen Benutzernamen mit gleichem Benutzernamen anlegen.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo dahaack,

ein INSTEAD OF TRIGGER wäre auch eine Möglichkeit.


mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
dahaack
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Hallo Gü,

vielen Dank dafür. Werde mir das mal anschauen.

Grüße

dahaack
private Nachricht | Beiträge des Benutzers