MySQL Mutex?

Status
Nicht offen für weitere Antworten.

Happyman0815

Mitglied
Hallo Leute!

Gibt es für MySQL so etwas wie Mutexe für Tabellen?

Folgendes möchte ich realisieren:

1. Lock Tabelle_xy
2. Daten Abfragen aus Tabelle_xy
3. Daten in Tabelle_xy einfügen
4. Unlock Tabelle_xy


Zwischen lock und unlock darf kein anderer auf die Tabelle zurgreifen (weder lesend noch schreibend). Ist das irgendwie zu realisieren?

Wenn ja, dann wären ein paar Java Codebeispiele sehr nett. Bin aber auch jedem Ratschlag dankbar der weiter hilft.


Gruß
Happyman0815
 
Danke für die Antwort!

Sperren LOCK TABLES die Tabellen lokal auf einem Client oder direkt auf dem Server? Wenn damit die Tabelle auf dem Server gelockt wird, so das kein Client mehr darauf zu greifen kann, dann wäre es optimal.

InnoDB wird mir bei meinem Problem leider nicht viel weiter helfen.



EDIT:

Ich habe noch eine Frage:

Ich möchte eine eine Connection cn in mehreren Threads verwenden:

Java:
...main(...)
{
     
    Connection cn = null;

    try {
        ...

        cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
    }...
     

    for(i=0; i < 1000 ;i++ )
    {
        runThread(cn);
    }
}


Ein Thread sperrt nun mit LOCK TABLES eine Tabelle. Können die anderen Threads dann noch auf die Tabelle zugreifen?
 
Zuletzt bearbeitet:
Locks gelten immer serverseitig, lockt ein Thread eine Tabelle, ist sie für alle anderen gesperrt.

Das wäre einfach perfekt.



Folgender Block muss bei mir für die Tabelle "datei" gelockt werden.

Java:
st.executeQuery("SELECT MAX(DATEISCHLÜSSEL) AS DATEISCHLÜSSEL FROM datei WHERE PROJEKTSCHLÜSSEL = "+datParam_class.projektID);
						rs.next();
						int dateischlüssel = rs.getInt(1);
						dateischlüssel++;
						insertBLOB(quell, ""+dateischlüssel , 0);

Wie lautet hierfür denn die genaue Schachtelung, wenn ich eine Schreib und lese Sperre auf die Tabelle setzen möchte?

Also:

Java:
LOCK Tabelle "datei";


						
st.executeQuery("SELECT MAX(DATEISCHLÜSSEL) AS DATEISCHLÜSSEL FROM datei WHERE PROJEKTSCHLÜSSEL = "+datParam_class.projektID);
						rs.next();
						int dateischlüssel = rs.getInt(1);
						dateischlüssel++;
						insertBLOB(quell, ""+dateischlüssel , 0);




UNLOCK Tabelle "datei";

Evtl. weißt du das ja so aus dem stehgreif. Wenn nicht muss ich selber mal gucken aber das Problem drückt gerade ;(

Gruß
Happy
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben