Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Select veraltet mit InnoDB

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mister-man, 17 Juni 2012.

  1. mister-man

    mister-man Neuer Benutzer

    Guten Tag,

    ich bin neu hier im Forum und hoffe keine Fehler zu machen. Falls diese Frage also schonmal gestellt worden ist, seit nachsichtig mit mir.

    Derzeit arbeite ich an einem Advert Script für Gameserver (CSS). Dazu setze ich SQL zur Datenhaltung ein.
    Nun habe ich das Problem, das ich bei InnoDB falsche Select ausgaben bekomme.

    Beispiel:

    Tabellen:

    Code:
    CREATE TABLE IF NOT EXISTS `msg` (
      `idmsg` int(11) NOT NULL AUTO_INCREMENT,
      `msg` varchar(100) NOT NULL,
      PRIMARY KEY (`idmsg`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
    CREATE TABLE IF NOT EXISTS `server` (
      `idserver` int(11) NOT NULL AUTO_INCREMENT,
      `ip` varchar(15) NOT NULL,
      `port` varchar(5) NOT NULL,
      `name` varchar(45) NOT NULL,
      PRIMARY KEY (`idserver`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
    CREATE TABLE IF NOT EXISTS `server_msg` (
      `fk_idserver` int(11) NOT NULL,
      `fk_idmsg` int(11) NOT NULL,
      PRIMARY KEY (`fk_idserver`,`fk_idmsg`),
      FOREIGN KEY (fk_idserver) REFERENCES server(idserver),
      FOREIGN KEY (fk_idmsg) REFERENCES msg(idmsg)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Nun zu meinem Problem, wenn mein Advert script startet, liest es alle NachrichtenID's aus der server_msg. Sortiert natürlich die aus, welche für andere Server sind.
    Wird nun über das Webinterface eine Nachricht entfernt, ignoriert es der Gameserver. Er bekommt fröhlich ein Ergebniss aus dem Cache, denke ich.

    Der script ist in Python und es wird pymysql eingesetzt. Das Webinterface ist in PHP.

    Danke !
     
  2. mister-man

    mister-man Neuer Benutzer

    Für alle mit selbigen Problem, hier ist die Lösung.....

    Code:
              User A                User B
     
              SET AUTOCOMMIT=0;      SET AUTOCOMMIT=0;
    time
    |          SELECT * FROM t;
    |          empty set
    |                                INSERT INTO t VALUES (1, 2);
    |
    v          SELECT * FROM t;
              empty set
                                      COMMIT;
     
              SELECT * FROM t;
              empty set
     
              COMMIT;
     
              SELECT * FROM t;
              ---------------------
              |    1    |    2    |
              ---------------------
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden