sql >> Databasteknik >  >> RDS >> Mysql

MySQL - JDBC - SELECT och DELETE samtidigt

Om du vill att din SELECT ska blockera efterföljande läsningar på den raden tills du tar bort den då, som Mark anger i sin kommentar, måste du

  • aktivera transaktioner (setAutoCommit(false) )
  • ställ in transaktionsisolering till SERIALIZABLE, och
  • använd SELECT ... FOR UPDATE

Den här exempelkoden fungerar för mig:

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. Välj alla projekt som har matchande taggar

  2. MySQL datumformat fuskblad

  3. Få infogat id från mysql infogningsprocedur

  4. PL/SQL-undantag vid uppdatering/borttagning av icke-existerande rad