mysql で既存のレコードの列を更新する前に、値が存在するかどうかを確認します。

概要

id、refresh_token、token の列を持つ Tokens というテーブルがあるとします。 fresh_token 列は一意である必要があります。ただし、null のfresh_token フィールドが多数ある可能性があります。これらの null のリフレッシュトークンフィールドは後で更新する必要がありますが、別のフィールドに含まれるリフレッシュトークン値を入力しようとする可能性があり、競合が発生します。

それで、私がやりたかったことは次のとおりです。

私はこのようにしましたが、それが最善の方法かどうかはわかりません。もしかしたら、あなたの答えについてアドバイスしたり、少し説明したりできるかもしれません。

    if con.query("(SELECT id FROM Tokens WHERE refresh_token='#{refresh_token}') LIMIT 1;").count == 1
       # do something important here
    else
        con.query("UPDATE Tokens SET refresh_token='#{refresh_token}' WHERE id='#{id}';")
    end

これは Ruby を使用して行われます。

解決策

次のステートメントを使用して、更新前にチェックを実行できます。

IF (NOT EXISTS(SELECT * FROM Tokens WHERE Token = ''))  
    BEGIN 
        INSERT INTO Tokens(token,..,..) 
        VALUES(val1,val2,val3) 
    END 
    END

または

  IF (EXISTS(SELECT * FROM Tokens WHERE Token = ''))  
        BEGIN 
            update Tokens
           SET token = myVal
        END 
        END

何が必要かわかりません。上記のいずれかが役立つことを願っています:)