MySQL全文索引的插入/更新在事务提交之前不会被处理。

【BUG重现】:

表结构:

CREATE TABLE tf (
    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    title varchar(200) DEFAULT NULL,
    body text,
    FULLTEXT KEY title (title, body) WITH PARSER ngram
) ENGINE=INNODB;

开启事务:

mysql> begin;
mysql> insert into tf values(1,'数据库','MySQL是这个世界上最流行的数据库.');

注:这里不要提交,执行

select * from tf where MATCH(title,body) AGAINST ('数据库' IN BOOLEAN MODE);

你会发现查询结果为空,但只要我commit提交,再执行上面的SQL,就可以看到结果。

mysql> commit;
mysql> select * from tf where MATCH(title,body) AGAINST ('数据库' IN BOOLEAN MODE);

你可以测试一下。^_^