Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - JDBC - SELECT et DELETE en même temps

Si vous voulez que votre SELECT bloque les lectures suivantes sur cette ligne jusqu'à ce que vous la supprimiez, comme Mark l'indique dans son commentaire, vous devrez

  • activer les transactions (setAutoCommit(false) )
  • définissez l'isolation des transactions sur SERIALIZABLE, et
  • utilisez SELECT ... FOR UPDATE

Cet exemple de code fonctionne pour moi :

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();