5 Stimmen

SQL-Ganzzahlbereich beim Erstellen von Tabellen

Ich versuche, meinem INT in einer meiner create-Anweisungen einen Bereich möglicher Werte zu geben, d. h.

CREATE TABLE Site(
    \*\*SiteID INT (1,4),\*\*
    UserID INT UNSIGNED Not Null,
    Name varchar(128) Unique Not Null,
    Foreign Key (UserID) References Users(UserID),
    Primary key (SiteID)
);

Ich habe die Syntax vergessen, die Sie für Bereiche verwenden, und ich bin mir ziemlich sicher, dass ich einen Fehler mache, wenn ich versuche, sie so zu verwenden, wie sie ist.

11voto

Ed Gibbs Punkte 25566

Anmerkung des Autors : Die ersten beiden Teile dieser Antwort sind falsch. Ich dachte, MySQL unterstützt CHECK Einschränkungen, und das hat es nicht. Das tut es immer noch nicht. Um Spalten auf eine einfache Liste von Werten zu beschränken, verwenden Sie die ENUM Ansatz am Ende dieser Antwort. Wenn die Logik komplizierter ist (Wertebereich, Wert basierend auf einer anderen Spalte usw.), ist die einzige MySQL-Option ein Trigger.


Sie brauchen eine CHECK Einschränkung, wenn es sich um eine INT :

CREATE TABLE Site (
  SiteID INT,
  CONSTRAINT SiteID_Ck CHECK (SiteID IN (1, 2, 3, 4)),
  ... and the rest

Oder:

CREATE TABLE Site (
  SiteID INT,
  CONSTRAINT SiteID_Ck CHECK (SiteID BETWEEN 1 AND 4),
  ... and the rest

Oder wenn Sie mit einem String SiteID leben können:

CREATE TABLE Site (
  SiteID ENUM('1', '2', '3', '4'),
  ... and the rest

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X