kostenloser Webspace werbefrei: lima-city


MySQL tinyint AutoIncrement Kuriosität

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    reimenseimen

    reimenseimen hat kostenlosen Webspace.

    Hi,

    ich wollte grad mal testen was passiert wenn bei einem Autoincrement das Maximum des verwendeten Datentyps erreicht ist.
    Ich wollte testen, ob der autoincrement wieder von vorne beginnt und einfach die gelöschten IDs verwendet, bzw die nicht (mehr) in der Datenbank vorhanden sind.

    Zur Kuriosität:
    Also hab ich als Autoincrement einen Tinyint der Länge 1, wie er auch für boolean verwendet wird, genommen.
    Wenn ich das richtig verstehe gibt die Länge 1 an wie viele Ziffern die Zahl hat und nicht wie viele Bits verwendet werden.
    Also hab ich fleißig bis id 9 neue datensätze eingefügt und dann auf meinen error-nachricht bei 10 gewartet, aber die kam nicht. Die ID wurde auf 10 erhöht, sowie danach auf 11.

    Jetzt wunder ich mich wie ein tinyint(1) auf 10, bzw. 11 erhöht werden kann.
    Der Datentyp ist immernoch tinyint(1): Man könnte ja vermuten, dass die DB automatisch bei AI die Anzahl die Ziffern erhöht.

    Gruß Simon
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Tini-Int zählt bis 255. die length, die du angibst, zählt für VarChar Variablen und ist dort auch pflicht, angegeben zu werden.


    dort steht auch nochmal die Antwort in Neudeutsch:

    http://www.phpmag.ru/2009/02/15/mysql-tinyint1-and-tinyint4-which-one-is-bigger/


    erst zerofill gibt der Geschichte wieder einen Sinn
  4. Hier kannst du dir angucken wieviele Zeichen welcher Datentyp max aufnehmen kann.

    http://www.sqlinfo.net/mysql/mysql_data_types.php

    Beitrag zuletzt geändert: 23.7.2012 12:31:43 von vctb
  5. Autor dieses Themas

    reimenseimen

    reimenseimen hat kostenlosen Webspace.

    sebulon schrieb:
    dort steht auch nochmal die Antwort in Neudeutsch:

    http://www.phpmag.ru/2009/02/15/mysql-tinyint1-and-tinyint4-which-one-is-bigger/


    Danke, nach dem Artikel ist das ganze schon nicht mehr so kurios und ich hab was dazu gelernt :-)

    Also macht das tinyint(1) bei boolean auch gar keinen Sinn. Im Prinzip wird doch ein ganzes Byte verwendet und man könnte bei boolean/tinyint(1) auch andere Werte als 0 und 1 eintragen.

    Danke auch für den Link vctb.
  6. Also macht das tinyint(1) bei boolean auch gar keinen Sinn.

    Warum nicht?
    Boolean ist bei MySQL nur ein Synonym und wird automatisch in TinyInt(1) umgewandelt, sobald du versuchst Boolean als Typ anzulegen.
    Wenn du wirklich nur boolesche Werte speichern willst, dann kannst du auch
    - BIT(1)
    - ENUM(0,1) NOT NULL
    verwenden. Um TinyInt bei booleschen Werten sauber zu halten, kannst du lieber
    UNSIGNED TinyInt(1) verwenden. Dann rutschen deine Werte auch nicht versehentlich ins negative ab, falls dies nicht kontrolliert wird.

    TinyInt als autoinkrementelle ID zu verwenden ist natürlich nur zu Anschauungszwecken, wie bei dir, gedacht.
    Es sei denn du hast eine Mini-Datenbank.:biggrin:
    Und bei autoincrement werden die Werte stets erhöht und nicht am Ende nach leeren Bereichen gesucht. Das widerspricht der Bezeichnung "autoincrement". :wink:

    Aber an sich ist die Idee nicht schlecht, das einfach mal auszuprobieren, man soll ja nicht immer alles glauben was in der Doku steht. :biggrin:
  7. Autor dieses Themas

    reimenseimen

    reimenseimen hat kostenlosen Webspace.

    kgreen schrieb:
    Also macht das tinyint(1) bei boolean auch gar keinen Sinn.

    Warum nicht?


    Naja, weil die 1 keinen Einfluss auf das tinyint hat.
    Das es Boolean nicht gibt, ist mir bewusst. Aber wäre ja dann sinnvoller das in BIT(1) umzuwandeln und nicht in tinyint(1).

    kgreen schrieb:
    TinyInt als autoinkrementelle ID zu verwenden ist natürlich nur zu Anschauungszwecken, wie bei dir, gedacht.
    Es sei denn du hast eine Mini-Datenbank.:biggrin:
    Und bei autoincrement werden die Werte stets erhöht und nicht am Ende nach leeren Bereichen gesucht. Das widerspricht der Bezeichnung "autoincrement". :wink:

    Aber an sich ist die Idee nicht schlecht, das einfach mal auszuprobieren, man soll ja nicht immer alles glauben was in der Doku steht. :biggrin:


    Klar, normalerweise nehme ich BIGINT aber da kann ich lange ID's einfügen, selbst mit ner Schleife ^^.
    Hab im Studium leider nicht die Zeit von allem die komplette Doku zu lesen.

    Wenn du Sie so haargenau gelesen hast, kannst du mir vll. ja auch meine eigentliche Frage beantworten.
    Was passiert wenn der letzte Wert erreicht wurde. Einfach finito/error?? Mein Ansatz wäre da ja sinnvoller^^
  8. Klaro kommt da ein Fehler von der DB zurück.
    Du sagst der DB, dass das Feld maximal 255 als Wert bekommen darf, wir reden hier von TinyInt(1) und wenn du diesen Wert plus 1 einfügst, dann wäre es folglich nur fair wenn die DB deinen Anweisungen folgt und dir einen Fehler zurück gibt.

    Dein Ansatz ist ja nicht verkehrt, allerdings zu zeitaufwendig.
    Wenn du den maximal erlaubten Wert kennst, warum gibst du in dann nicht manuell ein und testest dann einen neuen Wert Plus 1?
    Da ersparst du dir eine Menge Zeit.:wink:

    Beitrag zuletzt geändert: 25.7.2012 2:17:59 von kgreen
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!