sql >> データベース >  >> RDS >> Mysql

MySQL-JDBC-SELECTとDELETEを同時に

    SELECTで、その行を削除するまでその行の後続の読み取りをブロックする場合は、Markがコメントで示しているように、次のことを行う必要があります

    • トランザクションを有効にする(setAutoCommit(false)
    • トランザクション分離をSERIALIZABLEに設定し、
    • SELECT ... FOR UPDATEを使用します

    このサンプルコードは私のために機能します:

    conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    conn.setAutoCommit(false);
    
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery("SELECT token_id FROM tokens ORDER BY token_id LIMIT 1 FOR UPDATE");
    rs.next();
    int token_id = rs.getInt("token_id");
    System.out.printf("Got %d.%n", token_id);
    PreparedStatement ps = conn.prepareStatement("DELETE FROM tokens WHERE token_id=?");
    ps.setInt(1, token_id);
    ps.executeUpdate();
    conn.commit();
    


    1. 1つを除くすべてのフィールドを選択しますか?

    2. MSSQLまたは最適化ですぐに不足しているインデックス

    3. Oracleポートをポート8080から変更します

    4. PostgreSQLの数値の前にプラス/マイナス記号を付ける