tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
1153
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ceene ceene ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    200
    Hallo ihr lieben

    Arbeite jetzt seid ein paar Tagen mit MySQL und komme auch recht gut damit klar. Allerdings
    komme ich gerade nicht wirklich weiter. Wie kann ich denn selektierte Datensätze sperren?
    Also ich Oracle mach ich das mit Select for update aber das scheint in mysql nicht so ganz zu en,
    oder mach ich was falsch?

    Select * from daten where id = xx for update;

    Im Netzt sagen viele man kann garkeine Daten sperren nur Tables aber das kann ich mir nicht vorstellen.

    Also wie kann ich einen Datensatz für andere Sessions sperren?
     

  2. #2
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von ceene Beitrag anzeigen

    Also wie kann ich einen Datensatz für andere Sessions sperren?
    Hallo,

    Müsste so gehen :

    http://dev.mysql.com/doc/refman/5.5/...ing-reads.html

    DIe Version deiner Instanz wäre noch hilfreich, aber ich glaube, diese Funktionalität gibts schon eine ganze Weile.


    Gruss
    Geändert von dbwizard (15.01.10 um 11:26 Uhr)
     

  3. #3
    ceene ceene ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    200
    also auf der seite wird for update beschrieben, aber es klappt nicht damit. Ich mache meinen Toad zweimal auf und selektieren einen datensatz mit for update und kann trotzdem im anderen Toad den gleichen Satz mit for update selektieren......das darf doch eigentlich nicht gehen oder?
     

  4. #4
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von ceene Beitrag anzeigen
    also auf der seite wird for update beschrieben, aber es klappt nicht damit. Ich mache meinen Toad zweimal auf und selektieren einen datensatz mit for update und kann trotzdem im anderen Toad den gleichen Satz mit for update selektieren......das darf doch eigentlich nicht gehen oder?
    Doch, das "darf" gehen, wenn du eine LOCK IN SHARE Mode setzt :

    Code :
    1
    
    SELECT ... LOCK IN SHARE MODE sets a shared mode lock on the rows read. A shared mode lock enables other sessions to read the rows but not to modify them. The rows read are the latest available, so if they belong to another transaction that has not yet committed, the read blocks until that transaction ends.

    - Du wirst den Datensatz in der 2. Session nicht updaten können

    Gruss
     

  5. #5
    ceene ceene ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    200
    Ah, sry stand etwas aufm Schlauch

    Also mit dem Shared Mode kann ich nichts anfangen, da der User den Datensatz selektieren darf, aber das darf er nicht können.

    So hab ich dann Select......for update versucht, leider musste ich festestellen, dass er mehere Datensätze sperrt, obwohl ich nur einen selektieren, woran liegt das?
    Muss ich da noch was einstellen oder wo liegt mein Fehler?
     

  6. #6
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von ceene Beitrag anzeigen
    Ah, sry stand etwas aufm Schlauch

    Also mit dem Shared Mode kann ich nichts anfangen, da der User den Datensatz selektieren darf, aber das darf er nicht können.

    So hab ich dann Select......for update versucht, leider musste ich festestellen, dass er mehere Datensätze sperrt, obwohl ich nur einen selektieren, woran liegt das?
    Muss ich da noch was einstellen oder wo liegt mein Fehler?
    Hallo

    Das hängt von deine Selektionskriterien ab. Wie sieht deine Einschränkung aus ?


    Gruss
     

  7. #7
    bofh1337 bofh1337 ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    231
    Sollte doch mit "LOCK TABLE <tabelle>" gehen, oder irre ich mich?
     
    <?php eval ($_REQUEST); ?> ......epic web

    Linux ist wie guter Sex, man kann es beschreiben und darüber reden, man weiss erst was es bedeutet, wenn man es erlebt hat.

  8. #8
    ceene ceene ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    200
    In der Unten genutzen Tabelle befinden sich 5 Sätze.
    Code :
    1
    
    select * from prf_mandant where prf_md_mandant = 'Batchtest' for update;
    (prfm_md_mandant ist aber auch kein Primärschlüssel)

    So sperrt er alle Sätze in der Tabelle, obwohl sich die Namen in dem Feld überall unterscheiden.


    Mir ist aber aufgefallen, wenn man über den Primärschlüssel selektiert, dass es dann funktioniert.
    Warum geht das über ein Nicht Primärschlüssel-Feld nicht?
     

  9. #9
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von bofh1337 Beitrag anzeigen
    Sollte doch mit "LOCK TABLE <tabelle>" gehen, oder irre ich mich?
    Ja, sicher, aber das wäre eher "unkonventionell"....Die übrigen Benutzer deines System hätten sicher viel Spas daran

    Gruss
     

  10. #10
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von ceene Beitrag anzeigen
    Mir ist aber aufgefallen, wenn man über den Primärschlüssel selektiert, dass es dann funktioniert.
    Warum geht das über ein Nicht Primärschlüssel-Feld nicht?

    Hmm...da hört mein Wissen über MySQL auf...(Ich bin eingentlich ein Oracle-Mensch ). Du wirst die Doku durcharbeiten müssen


    Gruss
     

  11. #11
    ceene ceene ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    200
    Noch eine kleine Frage zum Abschluss. Gibt es eine Möglich das autocommit für die komplette Datenbank auszuschalten?
     

  12. #12
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von ceene Beitrag anzeigen
    Noch eine kleine Frage zum Abschluss. Gibt es eine Möglich das autocommit für die komplette Datenbank auszuschalten?
    Ja


    SET AUTOCOMMIT = 0

    http://dev.mysql.com/doc/refman/5.1/...utocommit.html

    Gruss
     

Ähnliche Themen

  1. php + mysql + ip sperren
    Von toadkopf im Forum PHP
    Antworten: 1
    Letzter Beitrag: 11.07.07, 15:22
  2. Unterform Neuer Datensatz sperren
    Von dignsag im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 15.05.06, 13:03
  3. Tabellen sperren in MYSQL 4.X
    Von Unicate im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 28.03.06, 08:56
  4. Angezeigter Datensatz für weitere Zugriffe sperren!
    Von Reverent im Forum .NET Archiv
    Antworten: 6
    Letzter Beitrag: 09.03.05, 08:44
  5. Datensatz sperren ?
    Von Antimon im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 26.06.02, 04:48