Aqua: -> (MySQL) UNIQUE id oder UNIQUE id (id) oder UNIQUE (id) ?

Hallo!

In der MySQL Dokumentation habe ich bereits gesucht,
aber ich konnte kein Beispiel dazu finden,
leider.

Ich habe eine Tabelle in MySQL:

CREATE TABLE essen (
  id int(10) NOT NULL auto_increment,
  name varchar(250) NOT NULL default '',
  fleisch varchar(50) default NULL,
  fisch varchar(50) default NULL,
  sweets varchar(250) NOT NULL default '',
  obst varchar(250) NOT NULL default '',
  datum datetime NOT NULL default '0000-00-00 00:00:00'
);

Die Felder "id" und "name"  sollen beide UNIQUE sein,
sprich es darf kein zweiter gleicher name bzw. keine
zweite gleiche ID vorkommen.

Frage Nr. 1 ist zu UNIQUE:

Ich sah bisher mehrere verschiedene Arten wie Leute
Felder zu UNIQUE type machten:

  1. UNIQUE id (id)
  2. UNIQUE id
  3. UNIQUE (id)
  4. Das Wort UNIQUE irgendwie an die zeile selbst hinter
       NOT NULL oder hinter default '' angehaengt

FRAGE:  Welche von den 4  Möglichkeiten ist korrekt?

Frage Nr. 2 ist zu Primary key:

Ist das so korrekt, oder?

PRIMARY KEY  (id),  oder muss ich da auch
  PRIMARY KEY id (id)  oder PRIMARY KEY id  machen wie beim anderen,

oder kann ich hier das  Wort "PRIMARY KEY" auch
im create syntax hinter NOT NULL oder so anhaengen?

Welches ist korrekt?

Frage Nr. 3 ist zum UNIQUE machen von anderen Sachen als id

Wie geht es wenn ich andere Felder als die ID
auch noch zu UNIQUE machen will?

z.B. das Feld "name" soll UNIQUE sein.

UNIQUE id (name)
oder
UNIQUE name (id)
oder
UNIQUE name
oder
UNIQUE (name)

oder auch in die create-zeile hinter NOT NULL ?

Was mach ich wenn ich 2 Felder habe,
die beide UNIQUE werden sollen?

Also "id" und "name" ??

UNIQUE id (id, name)
oder
UNIQUE name,id (id,name)
oder
UNIQUE name,id
oder
UNIQUE (name,id)
oder
UNIQUE name (id, name)

oder ...???

Vielen lieben Dank,
Aqua

  1. Hello,

    Ich habe eine Tabelle in MySQL:

    CREATE TABLE essen (
      id int(10) NOT NULL auto_increment ,
      name varchar(250) NOT NULL default '',
      fleisch varchar(50) default NULL,
      fisch varchar(50) default NULL,
      sweets varchar(250) NOT NULL default '',
      obst varchar(250) NOT NULL default '',
      datum datetime NOT NULL default '0000-00-00 00:00:00',

    primary key (id)

    );

    Damit wäre dann schon mal Unique für id gewährleistet, den PKs sind immer Unique.

    Und dann

    create unique index name on essen (name);

    Dann hast Du auf das einzelfeld name einen unique index gesetzt.

    Frage Nr. 2 ist zu Primary key:

    Ist das so korrekt, oder?

    PRIMARY KEY  (id),  siehe oben.

    oder kann ich hier das  Wort "PRIMARY KEY" auch
    im create syntax hinter NOT NULL oder so anhaengen?

    Nee, erst am Ende, weil dann gelich der Index angelegt werden kann. dazu muss MySQL aber erst die Lage der Felder kennen, die am Index beteiligt sind. Das Statement wird im Singlepass von links nach rechts ausgewertet und man kann ja nicht einen Key setzen auf Felder, die es noch nicht gibt.

    UNIQUE id_name (id,name)    id_name ist der name des Index

    UNIQUE name (id, name)      oder so, das geht aber nicht, wenn
                                   name schon weg ist als Indexname.

    Vielen lieben Dank,

    Bitteschön.

    Tom

    1. Hallo Tom!

      Danke für Deine Antwort!

      create unique index name on essen (name);

      Interessant, das sah ich noch nie...
      Wo in der MySQL-Doku kann ich das bitte nachlesen?

      Nee, erst am Ende, weil dann gelich der Index angelegt werden kann. dazu muss MySQL aber erst die Lage der Felder kennen, die am Index beteiligt sind.

      also:

      foo varchar(200) NOT NULL UNIQUE,

      ??

      UNIQUE id_name (id,name)    id_name ist der name des Index

      DAS versteh ich nicht!!!
      Bitte erklaer das so dass es jeder depp kapiert =)
      Wo zauberst Du den id_name her,  und sind id, name 2 versch.
      felder oder nur ein versehen dass du  ,  statt _ machst?

      UNIQUE name (id, name)      oder so, das geht aber nicht, wenn
                                     name schon weg ist als Indexname.

      ?????

      Wozu brauch ich das überhaupt?
      Ist das was anderes als

      create unique index name on essen (name);

      ?

      Das ist mir zu viel...
      Gibts dazu eine richtig nette, ausführliche,
      korrekte(!!) und deutsche Dokumentation (nicht von mysql.com)
      sondern eine mit vielen Beispielen dir für Dummies
      ausgelegt ist und die ich online gratis nachlesen kann?

      Danke,
      Aqua

      Sorry aber ich checks grad echt nicht...
      Ich geh jetzt mal schlafen,
      morgen gehts vielleicht ...

      Danke!

      1. Hello,

        hast Du MySQL-Front?

        Das ist echt praktisch. damit kann man schön Querys üben. Und natürlich auch die ganzen Tabellendefinitionen durchführen...

        liegt bei mir unter http://bitworks.de/software/mysql/MySQL-Front 2.5/MySQL-Front_2.5_Setup.exe

        Für Windows-Frontend

        Grüße

        Tom