MySQL Bestimmten Datensatz updaten

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von vielfrager.

    MySQL Bestimmten Datensatz updaten

    Moin moin,

    wenn ich eine Tabelle habe

    id name status pc
    1 ulf 1 ich
    2 heinz 1 nicht ich
    3 ute 0
    4 ulla 0
    (sorry, formatieren scheint auch nicht mein Ding zu sein)

    und den ersten Datensatz mit status=0 auf status=1 (id 3), pc=ich updaten möchte (also eine Art Update mit Limit 1) - geht das in nur einem Befehl ?

    Was ich damit bezwecke? Mehrere Rechner sollen sich damit jeweils den ersten freien Datensatz zur weiteren Bearbeitung "reservieren / blocken".
    Erst nach dem ersten Eintrag mit Status=0 zu fragen, dann anhand der id zu blocken und im Anschluss zu fragen, ob nicht ein anderer Rechner schneller war, scheint recht anfällig zu sein, wenn solche Abfrageketten von zwei Rechnern fast zeitgleich abgearbeitet werden.
    Ist eigentlich nicht sooo exotisch das Problem, oder?


    Fragt der Vielfrager ?(
    Danke vico255,

    aber...
    SELECT top 1 (Id+1) AS FreieId FROM tabelle1
    WHERE (Id+1) NOT IN (SELECT Id FROM tabelle1)
    ORDER BY id

    ergibt:

    Quellcode

    1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 (Id+1) AS FreieId FROM tabelle1 WHERE (Id+1) NOT IN (SELECT Id FROM tabe' at line 1


    Natürlich habe ich in der Abfrage tabelle1 durch den echten Namen ersetzt, nur die 1. Zeile Deines Vorschlags verstehe ich nicht und habe sie deswegen wohl falsch geschrieben

    Bitte lass es Hirn regnen ?(
    SELECT TOP n ... FROM .... WHERE ist MS SQL oder Oracle Syntax.
    SELECT ... FROM ... WHERE... LIMIT n ist MySQL.

    afaik gibt es zwischen den 3 großen DBs (MS SQL, Oracle, MySQL) keine einheitliche Syntax dafür.

    Edit: @vielfrager
    Das Problem von mehreren Verbindungen, die den selben Datensatz ändern/lesen/wahtever, ist fast so alt wie die DBMS Systeme selbst. Leider gibt es dafür keinen goldenen Mittelweg, sondern immer nur Kompromisse, und jeder Entwickler muss für sich entscheiden, welchen er eingeht. Was du dir dahingehend anschauen solltest sind Themen wie Tabellen- und Satzsperren, optimistische vs. pessimistische Sperren, Transaktionen, usw. um zu verstehen, wie dir die DBMS selbst versuchen bei diesem Thema zu helfen. Darauf aufbauend kannst du dann deine Lösung programmieren.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()