insert über mehrere tab...transaction?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • insert über mehrere tab...transaction?

    hallo zusammen,

    ich bin silicon, dass ist mein erster eintrag.
    ich habe ein problem, bei dem ihr mir vielleicht weiterhelfen könnt.
    ich habe 3 tabellen, normalisiert und als schlüssel eine patient_id.
    ich lasse den user über formulare daten eintragen. (php)

    wenn alles passt, soll ein insert passieren. da man nicht gleichzeitig alle 3 tabellen ändern kann, geschieht das ja einzeln.

    zuerst ein insert mit den werten in tabelle 1. danach hole ich über mysql_insert_id() die letzte autoincrement_id, die ich dann in die nächste tabelle eintragen möchte.

    das ganze mach ich dann über die 3 tabellen. schön und gut. wenn aber beim 2.ten insert ein fehler auftritt, habe ich inkonsistenz, 1 und 3 werden erzeugt.

    das ganze sollte man doch über transaction lösen können oder?
    ich weiß aber nich genau wie. ich fahre mysql 3.23.54, ich min mir nicht sicher ob ich über mysql_query () mehrer statements dort hineinsetzen kann, denke nicht.

    hat jemand dafür eine lösung?


    cheers,
    silicon

  • #2
    Re: insert über mehrere tab...transaction?

    das ganze sollte man doch über transaction lösen können oder?
    afaik ist mysql unter anderem deshalb so schnell, weil es auf einige features 'richtiger' datenbanken verzichtet - unter anderem auch auf transaktionen.

    will sagen: im konzept von mysql gibt es den begriff transaktion gar nicht.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      achja? lies mal hier:

      http://www.mysql.com/doc/en/COMMIT.html

      gut, dann hab ich sozusagen schon mein problem gelöst. ich fahr noch die alte version.

      START TRANSACTION was added to MySQL 4.0.11; This is the recommended way to start an ad-hoc transaction as this is ANSI SQL syntax...

      jetzt muss ich nur noch schauen das die statements richtig verarbeitet werden.

      weiß jemand ob die version 4.0.9 die zum download bereitseht schon vorkompiliert und stabil ist?

      cheers,
      silicon

      Comment


      • #4
        Evt. kannst Du auch ohne die Transaction arbeiten und den commit erst nach allen inesrts, etc auslösen, ähnlich kann man ja auch in Oracle arbeiten...

        @wahsaga: besser ein Post ohne zu wissen als keins, wie?
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Comment


        • #5
          @wahsaga:

          war nicht bös gemeint, ich bin doch selbst nur so n super-dau, hab durch zufall den link gefunden, davor hab ich davon auch nix gewusst.

          aber generell sind die neuen features bestimmt sehr fett, mysql wird richtig erwachsen!

          @mellowpie:

          in der richtung if (mysql_query(insert bla)) {
          mysql_query (commit)
          }

          oder wie?

          Comment


          • #6
            Ne Du brauchst eine neuere MySQL Version und musst transactions safe tables benutzen...
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Comment


            • #7
              mit Mysql 3.xx geht sowas mit Marke Eigenbau auch

              man lege in jede Tabelle eine Spalte mit autoincrement.
              nach eine insert Anweisung hole man sich mit mysql_insert_id() diese aus der DB.
              gibs keine, löscht du alles vorherige.

              ich habe mir dazu eine Klasse gebaut, welche diese ID gleich zurückgibt.

              Schnipsel:
              PHP Code:
              class Query {
                 
              // ...
                 
              function insert($query){
                  
              $this->queryid mysql_query($sql$this->linkid);
                  return 
              mysql_insert_id($this->linkid);
                 }
                 
              // ...

              geht dann so
              PHP Code:
              if($id=$query->insert("insert into ...")){
                  if(
              $id2=$query->insert("insert into ...")){
                      if(
              $query->insert("insert into ...")){
                          
              // alles OK hier !
                      
              }else{
                          
              $query->delete("delete from ... where id=".$id);
                          
              $query->delete("delete from ... where id=".$id2);
                      }
                  }else{
                      
              $query->delete("delete from ... where id=".$id);
                  }

              TBT

              Die zwei wichtigsten Regeln für eine berufliche Karriere:
              1. Verrate niemals alles was du weißt!


              PHP 2 AllPatrizier II Browsergame

              Comment


              • #8
                Original geschrieben von silicon
                achja? lies mal hier:

                http://www.mysql.com/doc/en/COMMIT.html

                START TRANSACTION was added to MySQL 4.0.11; This is the recommended way to start an ad-hoc transaction as this is ANSI SQL syntax..
                Das ist richtig ... aber seit, ich weiß nicht wann (irgendwo um die 3.23.17), gibt's schon die BEGIN Variante ... die Möglichkeit Transaktionen zu verwenden ist abhängig vom verwendeten Table handler ... Hast Du, repektive Dein Provider beispielsweise den InnoDB-Handler installiert ,kannst Du durchaus Transaktionen verwenden ... sogar Prüfungen der Referenz-Integrität sind möglich (FOREIGN KEYS mit sogar mit cascading delete) ... soviel zu den in MySQL nicht vorhandenen Features "richtiger Datenbanken".

                Original geschrieben von silicon
                weiß jemand ob die version 4.0.9 die zum download bereitseht schon vorkompiliert und stabil ist?

                cheers,
                silicon
                Compilierte MySQL Versionen der Version 4 gibt's hier: http://www.mysql.com/downloads/mysql-4.0.html ... es wird sogar empfohlen eine vorcompilierte Version zu verwenden ...

                Stabil ... nunja ... mittlerweile ist sie ja offiziell Gamma ... soll heißen ... sie funktioniert ... aber wenn was schief läuft ist keiner Schuld ... außer Dir vielleicht.
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Comment

                Working...
                X