Transaktion mit Select auf MyISAM Tabelle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Transaktion mit Select auf MyISAM Tabelle

    Hallo

    Ich würde gern eine Transaktion mit einem Select auf eine MyISAM Tabelle erstellen. Ist das so möglich?

    Mfg Akkie

  • #2
    1. kenne ich transaktionen nur im zusammenhang mit ändernden queries

    2. transaktionen sind imho innodb tabs vorbehalten
    MfG
    aim
    Lies mich jetzt!
    - OT-Tags-Liebhaber und BB-Code-Einrücker -

    Kommentar


    • #3
      Sorry hab mich falsch ausgedrückt.

      In der Transaktion befinden sich 2 Queries.
      Ein Select und eine Update.

      Die Tabelle auf die ich den Select mache ist eine MyISAM-Tabelle.
      Die Update Tabelle ist natürlich eine InnoDB.

      Mfg Akkie

      Kommentar


      • #4
        sollte normalerweise funktionieren, da die selektierte tabelle ja in keinem fall geändert wird.

        was genau willst du denn machen?
        MfG
        aim
        Lies mich jetzt!
        - OT-Tags-Liebhaber und BB-Code-Einrücker -

        Kommentar


        • #5
          Hi

          Die Select - Abfrage ist ein Join auf eine Usertabelle und mehreren Queue-Tabellen die das Benutzerprofil zur Freigebe zwischenspeichern.

          Die Update - Tabellen sind die Queue-Tabellen.

          Beim Select lasse ich mir einen Benutzer zurückgeben der ein Profil in der Queue hat und von keinem Mitarbeiter bearbeitet wird.
          Beim Update setzte ich einen Mitarbeiter für diesen User. Ich reserviere sozusagen den User für den Mitarbeiter.

          Mfg Akkie

          Kommentar


          • #6
            Und wozu brauchst du in diesem fall eine ta?
            MfG
            aim
            Lies mich jetzt!
            - OT-Tags-Liebhaber und BB-Code-Einrücker -

            Kommentar


            • #7
              Hi

              Wenn mehrere Mitarbeiter zur gleichen Zeit eine Anfrage machen könnte es passieren das sie beim Select den gleichen Benutzer bekommen. Und wenn ich es richtig verstanden habe wird bei einer Transaktion auf die Tabelle ein READ-Lock gesetzt.

              Mfg Akkie

              Kommentar


              • #8
                ja da liegst du richtig, aber ich glaube du verstehst den sinn von einem read lock nicht. ein read lock verhindert lediglich, dass der datensatz verändert bzw. gelöscht wird. wenn du möchtest, dass die datensätze erst garnicht angezeigt werden solltest du select for update benutzen:

                siehe auch hier
                MfG
                aim
                Lies mich jetzt!
                - OT-Tags-Liebhaber und BB-Code-Einrücker -

                Kommentar


                • #9
                  Hi

                  Das ganze macht mir noch ein bissel Probleme. Vielleicht kannst du mir ja helfen?

                  Ich weiß jetzt nicht ganz wie ich es machen soll.
                  Kommt die ganze sache jetzt trotzdem in eine Transaktion?

                  Wenn ich es ohne mache bekomme ich einen Fehler:
                  Commands out of sync; you can't run this command now

                  Mache ich es mit klappt die Transaktion. Nur der Query der danach kommt um die reservierten Einträge auszulesen scheitert dann mit einem MySQL server has gone away.

                  Code:
                  START TRANSACTION;
                  SELECT @vuserId:=`userId` FROM `user` FOR UPDATE;
                  UPDATE `queue` SET `editorId` = 1 WHERE `userId` = @vuserId;
                  COMMIT;
                  Das ganze schicke ich mit mysqli_multi_query an die Datenbank.

                  Danach kommt noch eine SELECT
                  Code:
                  SELECT `data1`, `data2` FROM `queue` WHERE `editorId` = 1
                  Den schicke ich normal mit mysqli_query

                  Mfg Akkie
                  Zuletzt geändert von ; 21.07.2006, 09:19.

                  Kommentar


                  • #10
                    Hi

                    Ich habe noch ein bissel rumprobiert und jetzt funktioniert es.

                    Ich Schicke die Queries jetzt einzeln an den Server und nutze die mysqli Methoden autocommit und commit.

                    Danke für deine Hilfe.

                    Mfg Akkie

                    Kommentar

                    Lädt...
                    X