Thread Lock auf MySql-table notwendig? (12 answers)
Opened by gast at 2010-12-24 15:35

Gast gast
 2010-12-26 16:36
#143828 #143828
2010-12-26T08:54:19 topeg
Ein Datenbank versucht Änderungen so schnell wie möglich allen anderen Nutzern zu Verfügung zu stellen und dabei die Integität der Datensätze zu erhalten. Dem Nutzer werden verschiedenen Hilfsmittel zur Verfügung gestellt, die das unterstützen.

Man kann die Option "AutoCommit=>1" bei DBI setzen und damit ein sofortiges verteilen aller gemachten Aktionen fordern. Ansonsten werden die Änderungen erst allen anderen zur Verfügung gestellt, wenn man $dbh->commit() ausführt oder die Verbindung zur DB schießt.

Intressant. Du schreibst "allen anderen Nutzern". Gilt das auch für Prozesse?
Quote
Du willst einen Eintrag einfügen wenn er nicht existiert. Dann füge ihn ein und schaue ob einen Fehlermeldung zurück kommt.

Würdest du die Rückgabe mit einem eval auswerten?
Code: (dl )
1
2
3
4
5
6
7
8
9
my $i = 4;
eval {
my $sql = qq(insert into test values (?));
my $sth = $dbh->prepare($sql);
$sth->execute($i);
};
if ($@) {
print "$@\n";
}

Der Code gibt 2 mal folgende Meldung aus:
"DBD::mysql::st execute failed: Duplicate entry '4' for key 'xxx' [for Statement "insert into test values (?)" with ParamValues: 0=4] at ./a.pl line 18"

Quote
Wenn es möglich ist einen doppelten Eintrag zu erzeugen, obwohl es nicht gewünscht ist, so stimmt etwas mit den Design der Tabelle nicht.
Oder habe ich etwas an deiner Anforderung nicht verstanden?
Du hast alles richtig verstanden. Vielen Dank für deine hilfreichen Infos. Die Spalte ist nun als unique markiert.
Last edited: 2010-12-26 16:43:57 +0100 (CET)

View full thread Lock auf MySql-table notwendig?