2016-05-12 15 views
2

Wenn Übereinstimmung mit/gegen innerhalb einer Transaktion, es scheint nicht aus den temporären Uncommited Daten abfragen:Match/Against und Transaktionen

start transaction; 

insert into feed_full_text (feed_id, full_text) values (5000008, "lorem ipsum"); 

select feed_id, full_text 
from feed_full_text 
where feed_id = 5000008 and match(full_text) against("lorem" in boolean mode) 
order by feed_id desc 
limit 1; 

commit 

liefert keine Ergebnisse, aber:

start transaction; 

insert into feed_full_text (feed_id, full_text) values (5000008, "lorem ipsum"); 

select feed_id, full_text 
from feed_full_text 
where feed_id = 5000008 
order by feed_id desc 
limit 1; 

commit 

Returns die gerade eingefügte Zeile und:

insert into feed_full_text (feed_id, full_text) values (5000008, "lorem ipsum"); 

select feed_id, full_text 
from feed_full_text 
where feed_id = 5000008 and match(full_text) against("lorem" in boolean mode) 
order by feed_id desc 
limit 1; 

Gibt die Zeile auch zurück. Ist das ein Fehler oder fehlt mir etwas? Ich verwende 5.7.11, wo Volltextindizes in InnoDB unterstützt werden.

+0

Mögliche Duplikate von [Ist es möglich, die eingefügte Zeile nacheinander einzufügen und auszuwählen?] (Http://stackoverflow.com/questions/14201947/is-it-possible-to-insert-and-) dann - wähle-die-eingefügte Zeile-nacheinander-aus –

Antwort

2

Dies ist das erwartete Verhalten. Die documentation sagt:

InnoDB Volltextindex Transaktionsabwicklung
InnoDB Volltextindizes haben spezielle Transaktionshandhabungseigenschaften aufgrund seiner Caching und Batch-Verarbeitungsverhalten. Insbesondere werden Aktualisierungen und Einfügungen in einem FULLTEXT-Index zur Transaktionsübergabezeit verarbeitet, was bedeutet, dass eine FULLTEXT-Suche nur festgeschriebene Daten anzeigen kann.

+0

Ich glaube, dass er _any_ Daten nicht sehen wird, bis er die Transaktion festschreibt. –

+1

Warum denkst du das? Nur Volltextindizes werden bis zum Ende der Transaktion zurückgestellt. Ein normales SELECT in der gleichen Transaktion sollte die eingefügten Daten sehen, aber ein SELECT in einer anderen Transaktion wird es nicht sehen. – Barmar