Wie schränkt man mit MySQL den einzutragenden Wert ein?

... komplette Frage anzeigen

8 Antworten

Du kannst in SQL-Datenbanken keine Wertebereiche definieren. Die Regeln für Wertebereiche bzw. Werteinschränkungen legst du über Kontrollstrukturen in der Programmierung fest, bevor die Werte hineingeschrieben werden. Du kannst mit VARCHAR maximal die Zeichen begrenzen, z.B. 5 bei einer deutschen Postleitzahl, aber auch das ist eigentlich nicht notwendig.


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Brotmensch89
30.11.2016, 23:04

Ok, ich denke, ich muss dann akzeptieren, dass es so nicht geht. Die Einschränkung ist Teil einer Aufgabe, die aus einem Buch kopiert wurde. Aber so langsam vermute ich, dass die Aufgabe sich gar nicht auf MySQL bezieht.

0

Geht nicht, soviel ich weiss.

Das kann man nur in der Applikation überprüfen aber das in der Datenbank zu garantieren wüsste ich jetzt nicht und wäre mir auch neu. SET wäre eine sehr hässliche Variante aber "möglich"

Antwort bewerten Vielen Dank für Deine Bewertung

Du könntest eine Tabelle mit gültigen Werten einrichten und einen Fremdschlüssel darauf legen. Die Datenbank kontrolliert daraufhin alle Eingabewerte, ob diese in der Referenztabelle enthalten sind.

Für die Postleitzahlen benutze ich z.B. eine aktuell gültige Postleitzahlentabelle.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von wotan38
01.12.2016, 10:22

Normalerweise macht man das auch nicht. Die Datenbank ist keine Programmiersprache, sondern eine Datenverwaltung. Auch wenn das immer wieder versucht wird, nutzt das nichts. Zum Lösen einer Aufgabe, die über die reine Datenhaltung hinausgeht, braucht man ein Programm mit Datenbankanbindung.

0

Was du suchst wird im Allgemeinen auch Validator genannt. Das ist in mysql nicht direkt umsetzbar. Wenn du die Werte beispielsweise mit Php aus einem Formular ausliest kannst du das folgendermaßen realisieren:


$input = htmlspecialchars($_GET['parameter']);
$regex = "/7[0-9]{4}]/" //Beispiel für Plz
if(preg_match($regex,$input) !== 0) {
//insert Statement
} else {
//gebe Fehler aus
}

Die Funktion "preg_match" gibt die anzahl der Treffer mit der Vorlage ($regex) aus. Wenn die Eingabe mit dem regex übereinstimmt (return ist nicht 0) soll der Wert eingetragen werden. Wenn nicht dann nicht. Der zweite Parameter ist die Eingabe in das Formular. ("parameter" durch den namen des Inputs austauschen)

Informationen zu regexen (Regulären Ausdrücken) findest du hier:

https://regex101.com/ - Seite auf der du regexe sehr gut Testen kannst und Erklärungen bekommst

https://de.wikipedia.org/wiki/Regul%C3%A4rer\_Ausdruck - Wiki Eintrag

Antwort bewerten Vielen Dank für Deine Bewertung

CHECK funktioniert für MySQL ja offenbar nicht.

Ja, Du musst die Werte auf andere Weise bei der Eingabe validieren

Antwort bewerten Vielen Dank für Deine Bewertung

Hey,

es scheint als wäre das in MySQL nicht möglich. Jedenfalls kann ich nichts in die Richtung im Manual finden: http://dev.mysql.com/doc/refman/5.7/en/constraint-invalid-data.html

Solltest du nicht auf MySQL festgelegt sein und z.B. PostgreSQL nutzen können, stehen dir da Constraints zur verfügung.

Antwort bewerten Vielen Dank für Deine Bewertung

das geht nicht ist auch nicht aufgabe einer datanbank

das filtert das vorhergehende programm raus.

man kann das schon umsetzten mit bisschen tricksen, ABER das ist nicht aufgabe der Datanbank

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?