Frage zu MySQL "CREATE TABLE IF NOT EXIST"

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Abend zusammen, ich hab mich heute mal wieder ans MySQL gemacht und wollte das der Server automatisch die Tabellen erstellt nur leider Funktioniert das nicht ganz wie geplant.


    Zitat

    22:03:46] CREATE TABLE IF NOT EXISTS `accounts` (`id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(28), `banned` tinyint(1), `serialn` varchar(28), `admin` int(4), `donater` int(4), `upgradepoints` int(4), `reg` tinyint(1), `sex` tinyint(1), `exp` int(2), `hand` int(11), `konto` int(11), `crimes` int(4), `arrested` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    [22:03:47] CREATE TABLE IF NOT EXISTS `accounts` (`wanteddeaths` int(11), `phonebook` int(11), `lottonr` int(11), `fishes` int(11), `biggestfish` int(11), `job` int(11), `paycheck` int(11), `jobgehalt` int(11), `headvalue` int(11), `jailed` int(11), `jailtime` int(11), `mats` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    [22:03:47] CREATE TABLE IF NOT EXISTS `accounts` (`drugs` int(11), `leader` int(11), `member` int(11), `rank` int(11), `charakter` int(11), `contracttime` int(1), `health` varchar(40), `interior` int(40), `local` int(11), `team` int(11), `model` int(11), `pnumber` int(11), `housekey` int(11), `bizzkey` int(11), `pos_x` varchar(40), `pos_y` varchar(40), `pos_z` varchar(40)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    [22:03:47] CREATE TABLE IF NOT EXISTS `accounts` (`carlic` int(11), `flylic` int(11), `lkwlic` int(11), `ALG` int(11), `carinsurance` int(11), `lifeinsurance` int(11), `boxmats` int(11), `boxdugs` int(11), `boatlic` int(11), `gunlic` int(11), `gun1` int(11), `gun2` int(11), `gun3` int(11), `gun4` int(11), `gun5` int(11), `ammo1` int(11), `ammo2` int(11), `ammo3` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    [22:03:47] CREATE TABLE IF NOT EXISTS `accounts` (`ammo4` int(11), `ammo5` int(11), `cartime` int(11), `payday` int(11), `paydayhad` int(11), `cdplayer` int(11), `wins` int(11), `loses` int(11), `alcoholperk` int(11), `drugperk` int(11), `painperk` int(11), `miserperk` int(11), `traderperk` int(11), `tut` int(11), `warns` int(11), `online` int(11), `fuel` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    [22:03:47] CREATE TABLE IF NOT EXISTS `accounts` (`married` int(11), `marriedto` varchar(28), `kampfstil` int(11), `spawnchange` int(11), `wanteds` int(11), `sflic` int(11), `lvlic` int(11), `uhrid` int(11), `ownperso` int(11), `pinb` int(11), `handyid` int(11), `handyakku` int(11), `handyton` int(11), `zigid` int(11), `zig` int(11), `zigsucht` int(11), `handygeld` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;


    Das habe ich mir printen lassen beim start, eigentlich alles wie gewollt.


    new sql[512];
    format(sql,sizeof(sql),"CREATE TABLE IF NOT EXISTS `accounts` (`id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(28), `banned` tinyint(1), `serialn` varchar(28), `admin` int(4), `donater` int(4), `upgradepoints` int(4), `reg` tinyint(1), `sex` tinyint(1), `exp` int(2), `hand` int(11), `konto` int(11), `crimes` int(4), `arrested` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
    mysql_query(sql);
    Das ist der dazugehörige Code, ich hab nicht alles eingefügt weils unnötig ist.



    Nun die Frage, die Tabellen werden nicht erstellt, was mache ich denn hier Falsch?

  • Vom SQL her ist der BEfehl richtig, was mich zweifeln lässt, ist dass du 3 mal die Gleiche Tabelle erstellen willst;) Das sollte spätestens nach dem erstellen der Table accounts zu nem durchlauf führen :D (keine Errormeldung :D )

  • Das Problem ist das die Tabelle noch nicht einmal erstellt wird. Es tut sich gar nix.


    Alles in einen String zu packen funktioniert aber nicht da der Code knapp 2,5k zeichen lang ist und maximal ist doch glaube 1028.


    //edit: gibts noch eine andere möglichkeit die tabellen so erstellen zu lassen? ich kenn mich mit mysql noch nicht so gut aus

    Einmal editiert, zuletzt von [GCW]HEiTZER ()

  • Eigentlich solltest du eine Fehlermeldung erhalten. Ich habs mal probiert und es sagt:

    Code
    [Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key


    Versuchs mal so:

    SQL
    CREATE TABLE IF NOT EXISTS `accounts` (`id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(28), `banned` tinyint(1),  `serialn` varchar(28), `admin` int(4), `donater` int(4), `upgradepoints` int(4), `reg` tinyint(1), `sex` tinyint(1), `exp` int(2), `hand` int(11), `konto` int(11), `crimes` int(4), `arrested` int(11), PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Wusa es funktioniert, wie schon in meiner Signatur steht maddin is göttlich :D


    So und damit zum nächsten Problem, es wird bis "arrest" erstellt und der nächste befehl geht schon nicht mehr. Wie löse ich das?^^


    //push need immer noch help :/

    Einmal editiert, zuletzt von [GCW]HEiTZER ()

  • Ich hatte ja zuerst das ausführen lassen das du mir gegegeben hattest, das hat auch funktioniert, nur kommt nun noch das dazu:



    (`wanteddeaths` int(11), `phonebook` int(11), `lottonr` int(11), `fishes` int(11), `biggestfish` int(11), `job` int(11), `paycheck` int(11), `jobgehalt` int(11), `headvalue` int(11), `jailed` int(11), `jailtime` int(11), `mats` int(11))


    (`drugs` int(11), `leader` int(11), `member` int(11), `rank` int(11), `charakter` int(11), `contracttime` int(1), `health` varchar(40), `interior` int(40), `local` int(11), `team` int(11), `model` int(11), `pnumber` int(11), `housekey` int(11), `bizzkey` int(11), `pos_x` varchar(40), `pos_y` varchar(40), `pos_z` varchar(40))


    (`carlic` int(11), `flylic` int(11), `lkwlic` int(11), `ALG` int(11), `carinsurance` int(11), `lifeinsurance` int(11), `boxmats` int(11), `boxdugs` int(11), `boatlic` int(11), `gunlic` int(11), `gun1` int(11), `gun2` int(11), `gun3` int(11), `gun4` int(11), `gun5` int(11), `ammo1` int(11), `ammo2` int(11), `ammo3` int(11))


    (`ammo4` int(11), `ammo5` int(11), `cartime` int(11), `payday` int(11), `paydayhad` int(11), `cdplayer` int(11), `wins` int(11), `loses` int(11), `alcoholperk` int(11), `drugperk` int(11), `painperk` int(11), `miserperk` int(11), `traderperk` int(11), `tut` int(11), `warns` int(11), `online` int(11), `fuel` int(11))


    (`married` int(11), `marriedto` varchar(28), `kampfstil` int(11), `spawnchange` int(11), `wanteds` int(11), `sflic` int(11), `lvlic` int(11), `uhrid` int(11), `ownperso` int(11), `pinb` int(11), `handyid` int(11), `handyakku` int(11), `handyton` int(11), `zigid` int(11), `zig` int(11), `zigsucht` int(11), `handygeld` int(11))


    und das bekomm ich nicht alles in einen String weil es zu lang wird, strings gehen ja nur bis 1028 zeichen

  • strings gehen ja nur bis 1028 zeichen

    Wer sagt denn sowas^^ SQL querys sind so die Ausnahmen was große strings angeht, weil die eben unter umständen lang werden können. Das einzige Porblem was sein könnte wäre wenn PAWNO meckert das die Zeile zu lang ist, aber dafür gibts ja z.b strcat.
    new string[2048];
    strcat(string, "CREATE TABLE IF NOT EXISTS `accounts` (`id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(28), `banned` tinyint(1), `serialn` varchar(28), `admin` int(4), `donater` int(4), `upgradepoints` int(4), `reg` tinyint(1), `sex` tinyint(1), `exp` int(2), `hand` int(11), `konto` int(11), `crimes` int(4), `arrested` int(11),");
    strcat(string, "`wanteddeaths` int(11), `phonebook` int(11), `lottonr` int(11), `fishes` int(11), `biggestfish` int(11), `job` int(11), `paycheck` int(11), `jobgehalt` int(11), `headvalue` int(11), `jailed` int(11), `jailtime` int(11), `mats` int(11),");
    strcat(string, "`drugs` int(11), `leader` int(11), `member` int(11), `rank` int(11), `charakter` int(11), `contracttime` int(1), `health` varchar(40), `interior` int(40), `local` int(11), `team` int(11), `model` int(11), `pnumber` int(11), `housekey` int(11), `bizzkey` int(11), `pos_x` varchar(40), `pos_y` varchar(40), `pos_z` varchar(40),");
    strcat(string, "`carlic` int(11), `flylic` int(11), `lkwlic` int(11), `ALG` int(11), `carinsurance` int(11), `lifeinsurance` int(11), `boxmats` int(11), `boxdugs` int(11), `boatlic` int(11), `gunlic` int(11), `gun1` int(11), `gun2` int(11), `gun3` int(11), `gun4` int(11), `gun5` int(11), `ammo1` int(11), `ammo2` int(11), `ammo3` int(11),");
    strcat(string, "`ammo4` int(11), `ammo5` int(11), `cartime` int(11), `payday` int(11), `paydayhad` int(11), `cdplayer` int(11), `wins` int(11), `loses` int(11), `alcoholperk` int(11), `drugperk` int(11), `painperk` int(11), `miserperk` int(11), `traderperk` int(11), `tut` int(11), `warns` int(11), `online` int(11), `fuel` int(11),");
    strcat(string, "`married` int(11), `marriedto` varchar(28), `kampfstil` int(11), `spawnchange` int(11), `wanteds` int(11), `sflic` int(11), `lvlic` int(11), `uhrid` int(11), `ownperso` int(11), `pinb` int(11), `handyid` int(11), `handyakku` int(11), `handyton` int(11), `zigid` int(11), `zig` int(11), `zigsucht` int(11), `handygeld` int(11), PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
    Laut Notepad++ sinds genau 1936 zeichen, also solltest du mit der größe von 2048 auskommen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • man lernt nie aus.. meine rettung :D


    Ich hatte mal irgendwo gelesen das strings nur bis 1028 zeichen gehen.. aber gut zu wissen das es nicht so ist :) danke (mal wieder) Maddin