Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) innodb, mysql (edit)
 
Reply to this topicStart new topicStart Poll
> InnoDB Speicherengine Rollback, Wie statement zusammenbauen
Daniel_CB
Geschrieben am: Mo 15.01.2007, 17:23
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 54
Mitglied seit: 13.04.2006


Hallo,

ich beschäftige mich gerade mit Transaktion sicheren Tabellen.

Da ich in der Doku gelesen habe das InnoDB Rollback unterstützt und die Struktur wichtig ist habe ich mich für INNODB mit Rollback beschäftig und leider noch nicht so wirklich verstanden.

In der Doku steht

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

wenn ich dieses richti verstanden hab müsste mein Statement so aussehen

START TRANSACTION;
UPDATE tree SET rgt=rgt+2 WHERE rgt >= $RGT;
UPDATE tree SET lft=lft+2 WHERE lft > $RGT;
INSERT INTO tree (name,lft,rgt) VALUES ('Halbaffen', $RGT, $RGT +1);
COMMIT;

was passiert wenn 2 User im Intranet Daten in dieses Modell einfügen. ist die Tabelle solange gesperrt bis eine Transaktion abgeschlossen ist?

weil beide werden als MYSQL user "miarbeiter" das statement auf die DB loslassen

Ich hoffe Ihr könnt mir helfen da ich eine DB vorstellung meinem "projektmanager" morgen vorstellen muss.

Daniel
Top
PMICQMSN
Top
 
 
Daniel_CB
#2 Geschrieben am: Mo 15.01.2007, 18:36 (+01:13)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 54
Mitglied seit: 13.04.2006


Server Version: 5.0.27-community-nt
Der MYSQL Typ
Top
PMICQMSN
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#3 Geschrieben am: Mo 15.01.2007, 18:44 (+00:07)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2432
Mitglied seit: 4.02.2006


QUOTE (Daniel_CB @ Mo 15.1.2007, 17:23)
wenn ich dieses richti verstanden hab müsste mein Statement so aussehen

START TRANSACTION;
UPDATE tree SET rgt=rgt+2 WHERE rgt >= $RGT;
UPDATE tree SET lft=lft+2 WHERE lft > $RGT;
INSERT INTO tree (name,lft,rgt) VALUES ('Halbaffen', $RGT, $RGT +1);
COMMIT;

was passiert wenn 2 User im Intranet Daten in dieses Modell einfügen. ist die Tabelle solange gesperrt bis eine Transaktion abgeschlossen ist?

Das Grundprinzip ist korrekt.

Ob die ganze Tabelle gesperrt wird, könnte man - wäre das ein MS-SqlServer - so nicht sagen: Die Verbindung kann selbst die Sperrstufe festlegen. Das kann von SERIALIZABLE (= Tabellensperrung) bis sehr schwach gehen, so daß dazwischen Dirty Reads möglich wären.

Eine Tabellensperrung würde hier allerdings unnötigerweise alle rgt < $RGT sperren, wäre also eigentlich überflüssig. Wenn eine Sperre (hier für die rgt >= $RGT) angefordert wird, müßte dieser Zugriff warten, bis alle bestehenden Lesesperren abgebaut sind, dann kriegt er die exklusive Sperre und blockiert solange auch alle Lesezugriffe.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Daniel_CB
#4 Geschrieben am: Mo 15.01.2007, 19:03 (+00:19)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 54
Mitglied seit: 13.04.2006


trotz mehrmaligen Probieren bekomme ich es nicht hin sad.gif



SET AUTOCOMMIT=0;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).
begin;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).
UPDATE tree SET rgt=rgt+2 WHERE rgt = 2;# Betroffene Datensätze: 1
INSERT INTO tree (name,lft,rgt) VALUES ('Primaten',2,3);# Betroffene Datensätze: 1
ROLLBACK;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).



was mache ich falsch
Top
PMICQMSN
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#5 Geschrieben am: Mo 15.01.2007, 20:04 (+01:01)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2432
Mitglied seit: 4.02.2006


QUOTE (Daniel_CB @ Mo 15.1.2007, 19:03)
SET AUTOCOMMIT=0;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).
begin;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).
UPDATE tree SET rgt=rgt+2 WHERE rgt = 2;#  Betroffene Datensätze:  1
INSERT INTO tree (name,lft,rgt) VALUES ('Primaten',2,3);#  Betroffene Datensätze:  1
ROLLBACK;# MySQL lieferte ein leeres Resultat zurück (d.&nbsp;h. null Zeilen).

Wenn Du eine Transaktion mit einem Rollback abschließt, dann wird natürlich nichts geändert.

Das ist doch der Sinn einer Transaktion, daß eine aus mehreren Schritten bestehende Operation entweder gar nicht oder vollständig ausgeführt wird.

Und die Begin Transaction / Commit / Rollback - Anweisungen geben - zumindest auf dem MS-SqlServer - auch nie etwas zurück, mySql verwende ich nicht, das wird da aber genauso sein.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/16115

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Wer arbeitet mit PHP5 und MySQL >=4 bzw. Inn ... Josh 637 10 Mo 13.06.2005, 12:02




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]