Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - JDBC - WYBIERZ i USUŃ jednocześnie

Jeśli chcesz, aby SELECT blokował kolejne odczyty w tym wierszu, dopóki go nie usuniesz, wtedy, jak wskazuje Mark w swoim komentarzu, musisz

  • włącz transakcje (setAutoCommit(false) )
  • ustaw izolację transakcji na SERIALIZABLE i
  • użyj SELECT ... FOR UPDATE

Ten przykładowy kod działa dla mnie:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate, MySQL i tabela o nazwie Repeat - dziwne zachowanie

  2. MySql — czy klucz podstawowy jest domyślnie unikalny?

  3. Jak zaktualizować MySQL na CentOS

  4. przepisz połączenie i zapytanie z mysql do PDO

  5. php exec() - mysqldump tworzy pusty plik