MySQL 5 - Datensatz sperren

ceene

Erfahrenes Mitglied
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?
 
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?
 
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:
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
 
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?
 
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
 
In der Unten genutzen Tabelle befinden sich 5 Sätze.
Code:
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?
 

Neue Beiträge

Zurück