[SQL] Mysqal Tabelle

Dieses Thema im Forum "Webentwicklung" wurde erstellt von BladeFire, 17. Mai 2011 .

Schlagworte:
  1. 17. Mai 2011
    Mysqal Tabelle

    Hallo ich habe mcih gerade mit Mysql beschäftigt doch jetzt wir der fehler angezeigt:


    MySQL meldet: Dokumentation
    #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

    Es wird angezeigt wenn ich (AI) auto_increment Aktvire

    So sieht der Quelltext aus:

    ____________________________________________________________________________________
    ALTER TABLE `css_rank` CHANGE `rank_id` `rank_id` INT( 64 ) NOT NULL ,
    CHANGE `steamId` `steamId` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    CHANGE `nick` `nick` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    CHANGE `kills` `kills` INT( 12 ) NOT NULL ,
    CHANGE `deaths` `deaths` INT( 12 ) NOT NULL ,
    CHANGE `headshots` `headshots` INT( 12 ) NOT NULL ,
    CHANGE `sucsides` `sucsides` INT( 12 ) NOT NULL ,
    CHANGE `last_active` `last_active` INT( 12 ) NOT NULL ,
    CHANGE `played_time` `played_time` INT( 12 ) NOT NULL
    _____________________________________________________________________________________
    was mach ich Falsch?
     
  2. 17. Mai 2011
    AW: Mysqal Tabelle

    Für welche Spalte willst du denn Autoincrement aktivieren? Ich würde sagen du brauchst das garnicht.
    Ich würde in deinem Fall die SteamID als primary key definieren, da diese in jedem Fall einzigartig ist und jeden Spieler eindeutig identifiziert.
     
  3. 17. Mai 2011
    AW: Mysqal Tabelle

    __________________________________________________
    CHANGE `rank_id` `rank_id` INT( 64 ) NOT NULL ,
    ___________________________________________________

    In dieser Spalte will ich es Aktiviren.

    So sollte es ausehn:

    ______________________________________________________________________________
    CREATE TABLE `css_rank`(
    `rank_id` int(64) NOT NULL auto_increment,
    `steamId` varchar(32) NOT NULL default '',
    `nick` varchar(128) NOT NULL default '',
    `kills` int(12) NOT NULL default '0',
    `deaths` int(12) NOT NULL default '0',
    `headshots` int(12) NOT NULL default '0',
    `sucsides` int(12) NOT NULL default '0',
    `last_active` int(12) NOT NULL default '0',
    `played_time` int(12) NOT NULL default '0',
    PRIMARY KEY (`rank_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    ___________________________________________________________________________________

    So sieht es aus:

    ___________________________________________________________________________________
    ALTER TABLE `css_rank` CHANGE `rank_id` `rank_id` INT( 64 ) NOT NULL ,
    CHANGE `steamId` `steamId` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    CHANGE `nick` `nick` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    CHANGE `kills` `kills` INT( 12 ) NOT NULL ,
    CHANGE `deaths` `deaths` INT( 12 ) NOT NULL ,
    CHANGE `headshots` `headshots` INT( 12 ) NOT NULL ,
    CHANGE `sucsides` `sucsides` INT( 12 ) NOT NULL ,
    CHANGE `last_active` `last_active` INT( 12 ) NOT NULL ,
    CHANGE `played_time` `played_time` INT( 12 ) NOT NULL
    ____________________________________________________________________________________
    Was mach ich falsch?
     
  4. 17. Mai 2011
    AW: Mysqal Tabelle

    Laut Fehlermeldung gibt es ja beteits eine Spalte bei der das autoincrement angeschalten ist. Überprüfe mal ob mysql beim erstellen der Tabelle bereits selbständig irgend eine Index-Spalte angelegt hat. Man weiß ja nie...

    Btw. Was willst du mit dieser rank_id ausdrücken? Ich würde als Schlüssel immer noch die Steam-ID nehmen.
     
  5. 17. Mai 2011
    AW: Mysqal Tabelle

    so ich hab es jetzt nochmal erstellt

    _______________________________________________________________________________________
    Fehler

    SQL-Befehl:

    CREATE TABLE `lordilidan`.`css_rank` (
    `rank_id` INT( 64 ) NOT NULL AUTO_INCREMENT ,
    `steamId` VARCHAR( 32 ) NOT NULL ,
    `nick` VARCHAR( 128 ) NOT NULL ,
    `kills` INT( 12 ) NOT NULL ,
    `deaths` INT( 12 ) NOT NULL ,
    `headshots` INT( 12 ) NOT NULL ,
    `sucsides` INT( 12 ) NOT NULL ,
    `last_active` INT( 12 ) NOT NULL ,
    `played_time` INT( 12 ) NOT NULL ,
    PRIMARY KEY ( `rank_id` )
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci PRIMARY KEY ( `rank_id` )
    ____________________________________________________________________________________

    besser gesagt ich wollte es erstelln.

    Ich habe wie ich es das erste mal Probiert habe
    ____________________________________________________
    PRIMARY KEY (`rank_id`))
    ____________________________________________________
    bei "Tabellen-Kommentar" eingeefügt diesesmal aber bei "PARTITION Definition:"

    Wahr das richtig oder Falsch?

    und was habe ich diesesmal falsch gemacht?

    Ich weis auch ncith warum ich rank id als Schlüßel setze. Ich weis noch nciht mal was der Schlüßel bedeutet.

    Danke für deine Antworten
     
  6. 17. Mai 2011
    AW: Mysqal Tabelle

    Das hab ich mir fast gedacht. Ich versuche es mal kurz und verständlich zu erklähren: der Schlüssel bzw primary key ist ein Feld (bzw ein Verbund aus mehreren Feldern, aber das dürfte für dich uninteressant sein) der eine Zeile einer Tabelle eindeutig beschreibt. Das heißt in einer Tabelle muss in diesem Feld in jeder Zeile etwas anderes drin stehen. Da eine Steam-ID bekanntermaßen eindeutig ist habe ich dir dies als Schlüssel empfohlen. Nach deinem Statement wird ein Feld angelegt, das automatisch mit einer aufsteigenden Nummer ausgefüllt wird um gleiche Werte aus zu schließen. Dies ist bei vielen Tabellen, bei denen es kein eindeutiges Merkmal gibt, sinnvoll um keinen zusammengesetzten Schlüssel zu haben. Du hast aber die Stem-ID und diese ist bereits eindeutig, also ist das Feld rank_id überflüssig.

    Dein SQL Statement funktioniert in meiner Testdatenbank einwandfrei bis auf das primary key in der letzten Zeile. Lösche das und das Statement läuft durch. Allerdings empfehle ich dir das ganze Zeug ab engine weg zu lassen, da du vermutlich auch nicht weißt was das bedeutet und das so noch mehr Probleme verursachen kann.

    Wenn du dich weiter mit Datenbanken beschäftigen willst empfehle ich dir allerdings erst einmal mit dem theoretischen Aufbau einer Datenbank zu beschäftigen.
     
  7. 17. Mai 2011
    AW: Mysqal Tabelle

    Danke für deine Schnellen Antworten

    Grundsätzlich will ich mich nciht mehr damit beschäftigen das war nur für ein script und darum sollte ich (denke ich) so wenieg wie möglcih ändern.

    Ohne den schlüßel hats Funktioniert Hoffentlich funktioniert dann auch das script

    Danke nochmals
     
  8. 17. Mai 2011
    AW: Mysqal Tabelle

    hi, falls es dich interessiert: INT (1234) gibt nicht an, dass du dort eine 1234-stellen zahl speichern willst.

    INT
    signed: -2147483648 - 2147483647
    unsigned: 0 - 4294967295

    egal was du in den klammern angibst. die klammern werden lediglich dafür verwendet, um zahlen mit leerzeichen aufzufüllen falls die anz. der stellen geringer ist als der wert in den klammern.

    im php-script bekommst du davon nichts mit.

    INT( 64 ) und INT( 12 ) entspricht daher vermutlich nicht deiner erwartung, denn mehr als 10 stellen werden die zahlen nicht haben.

    falls du wirklich so große zahlen brauchst, kannst du auf das maximum BIGINT zurückgreifen.

    signed: -9223372036854775808 - 9223372036854775807
    unsigned: 0 - 18446744073709551615

    mehr geht nicht als echte zahl.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.