Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Dantensätze mit mySQL locken (https://www.delphipraxis.net/39100-dantensaetze-mit-mysql-locken.html)

Luckie 28. Jan 2005 16:42


Dantensätze mit mySQL locken
 
Ich habe eine mySQL Datenbank, sie läuft zwar lokal aber aus reinem Interesse: Wie sperre ich einen Datensatz damit nicht zwei Clients ihn gleichzeitig ändern können?

Marcel Gascoyne 28. Jan 2005 16:56

Re: Dantensätze mit mySQL locken
 
MySQL braucht eigentlich kein Locking, obwohl es keine Transaktionen kennt (zumindest die Standard Tabellen können keine; mit InnoDB sieht das schon anders aus). MySQL arbeitet mit Lese- und Schreibthreads und macht Table Locking (siehe auch diesen Artikel).

Du kannst das Problem auch lösen indem Du einen Versionszähler in Deine Tabelle einbaust:

SQL-Code:
create table kunde (
  id     integer not null,
  version integer not null default 1,
  name   varchar(60)
)
Bei einem INSERT wird die Version auf 1 gesetzt, bei einem UPDATE machst Du das einfach so:

SQL-Code:
update kunde
set name="Neuer Name"
where id = 100
and  version = 1
Dadurch das Du immer auf eine bestimmte Version prüfst kannst Du Konflikte mit anderen Anwendungen vermeiden.

Gruß,
Marcel

Mamphil 29. Jan 2005 15:48

Re: Dantensätze mit mySQL locken
 
Hi!

Musst du die Version nicht noch hochzählen?
SQL-Code:
update kunde
set name="Neuer Name", version = version + 1
where id = 100
and  version = 1
Mamphil

Luckie 29. Jan 2005 15:49

Re: Dantensätze mit mySQL locken
 
Zitat:

Zitat von Marcel Gascoyne
MySQL braucht eigentlich kein Locking, obwohl es keine Transaktionen kennt (zumindest die Standard Tabellen können keine; mit InnoDB sieht das schon anders aus). MySQL arbeitet mit Lese- und Schreibthreads und macht Table Locking (siehe auch diesen Artikel).

Ok, danke. Dann hat sich das erledigt.

Marcel Gascoyne 29. Jan 2005 18:13

Re: Dantensätze mit mySQL locken
 
Zitat:

Zitat von Mamphil
Musst du die Version nicht noch hochzählen?

Oops, natürlich :wall:

Gruß,
Marcel


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz