Laden...

mySQL: Bedingtes INSERT INTO

Erstellt von dahaack vor 12 Jahren Letzter Beitrag vor 12 Jahren 972 Views
D
dahaack Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren
mySQL: Bedingtes INSERT INTO

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!

M
402 Beiträge seit 2005
vor 12 Jahren

Hi...

gib "name" einen UNIQUE-KEY.

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

lg

D
dahaack Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Hallo M@TUK,

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.

6.911 Beiträge seit 2009
vor 12 Jahren

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

D
dahaack Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Hallo Gü,

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

Grüße

dahaack