Mysql
 sql >> база данни >  >> RDS >> Mysql

как да заключите някои редове, тъй като те не са избрани в друга транзакция

Звучи така, сякаш имате нужда от някаква форма на маркер, за да идентифицирате редовете като „използвани“, така че другите екземпляри да не обработват същите данни; дали използвате булев тип или тип дата, е без значение, по някакъв начин трябва да маркирате използваните редове.

Можете да направите това чрез диспечер, процес или нишка с единствен достъп до вашата таблица и чиято единствена работа е да избира редове и да ги предава на други процеси, върху които да работят. Дори тогава диспечерът ще трябва да знае колко далеч са получили данните, за да се върнете към същия проблем.

Друг начин е да използвате поле, за да посочите, че редът се използва (както казахте във вашия въпрос). Всеки процес актуализира блок от редове с уникален идентификатор, изпълняван в транзакция, за да заключи таблицата; Бих използвал номера на връзката, върнат от CONNECTION_ID() за да ги маркирате, тогава знаете, че е уникален.

След UPDATE ... WHERE connection_id IS NULL (с приложен лимит) транзакцията е завършена, процесът може да SELECT ... WHERE connection_id = CONNECTION_ID() за да получат техните редове за обработка.

Когато завършат работата си, целият цикъл започва отново, за да маркира следващия набор от редове, докато всички бъдат обработени.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените набора от символи от latin1 на UTF8 в MySQL

  2. mysqli или умре, трябва ли да умре?

  3. Не мога да задам low_case_table_names в MySQL 8.x на Windows 10

  4. Какво да правите със стил на URL адрес на общността като Last.FM или Wikipedia?

  5. Google App Engine и Cloud SQL:Загубена връзка с MySQL сървър при „четене на първоначален комуникационен пакет“