---
title: "全文索引 - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: 全文索引 OceanBase 数据库通过 CREATE TABLE 语句使用 FULLTEXT 关键字来支持创建全文索引。在 OceanBase 数据库的 MySQL 模式下，全文索引可以应用于 CHAR 、 VARCHAR 和 TEXT 类型的列。此外，OceanBase 数据库允许在主表上建立多个全文索引，并且对…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.4

# 全文索引

更新时间：2024-12-02 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/100.oceanbase-database-concepts/400.database-objects/200.database-objects-of-mysql-mode/300.index-of-oracle-mode/320.full-text-indexes-of-mysql-mode-in-concepts.md)  

OceanBase 数据库通过 `CREATE TABLE` 语句使用 `FULLTEXT` 关键字来支持创建全文索引。在 OceanBase 数据库的 MySQL 模式下，全文索引可以应用于 `CHAR`、`VARCHAR` 和 `TEXT` 类型的列。此外，OceanBase 数据库允许在主表上建立多个全文索引，并且对于同一列也可以建立多个全文索引。

非分区表和分区表上有无主键都可以创建全文索引，创建全文索引限制如下：

- 全文索引仅支持应用于 `CHAR`、`VARCHAR` 和 `TEXT` 类型的列。
 - 当前版本只支持创建局部（`LOCAL`）全文索引。
 - 创建全文索引时不可以指定 `UNIQUE` 关键字。
 - 如果要创建涉及多列的全文索引，则必须确保这些列具有相同的字符集。

通过使用这些语法和规则，OceanBase 数据库的全文索引功能提供了对文本数据的高效搜索和检索能力。

## DML 操作

对于已创建包含全文索引的表，支持 `INSERT INTO ON DUPLICATE KEY`、`REPLACE INTO`、多表的更新/删除、以及可更新视图等复杂 DML 操作。

**示例如下：**

- INSERT INTO ON DUPLICATE KEY：

  ```sql
  INSERT INTO articles VALUES ('OceanBase', 'Fulltext search index support insert into on duplicate key')
      ON DUPLICATE KEY UPDATE title = 'OceanBase 4.3.3';

  ```
 - REPLACE INTO：

  ```sql
  REPLACE INTO articles(title, context) VALUES ('Oceanbase 4.3.3', 'Fulltext search index support replace');

  ```
 - 多表的更新/删除。

     1. 创建表 `tbl1`。

       ```sql
       CREATE TABLE tbl1 (a int PRIMARY KEY, b text, FULLTEXT INDEX(b));

       ```
     2. 创建表 `tbl2`。

       ```sql
       CREATE TABLE tbl2 (a int PRIMARY KEY, b text);

       ```
     3. 多个表的更新（`UPDATE`）语句。

       ```sql
       UPDATE tbl1 JOIN tbl2 ON tbl1.a = tbl2.a
           SET tbl1.b = 'dddd', tbl2.b = 'eeee';

       ```

       ```sql
       UPDATE  tbl1 JOIN tbl2 ON tbl1.a = tbl2.a SET tbl1.b = 'dddd';

       ```

       ```sql
       UPDATE tbl1 JOIN tbl2 ON tbl1.a = tbl2.a SET tbl2.b = tbl1.b;

       ```
     4. 多个表的删除（`DELETE`）语句。

       ```sql
       DELETE tbl1, tbl2 FROM tbl1 JOIN tbl2 ON tbl1.a = tbl2.a;

       ```

       ```sql
       DELETE tbl1 FROM tbl1 JOIN tbl2 ON tbl1.a = tbl2.a;

       ```

       ```
 - 可更新视图 DML。

     1. 创建视图 `fts_view`。

       ```sql
       CREATE VIEW fts_view AS SELECT * FROM tbl1;

       ```
     2. `INSERT` 语句用于可更新视图。

       ```sql
       INSERT INTO fts_view VALUES(3, 'cccc'), (4, 'dddd');

       ```
     3. `UPDATE` 语句用于可更新视图。

       ```sql
       UPDATE fts_view SET b = 'dddd';

       ```

       ```sql
       UPDATE fts_view JOIN normal ON fts_view.a = tbl2.a
          SET fts_view.b = 'dddd', tbl2.b = 'eeee';

       ```
     4. `DELETE` 语句用于可更新视图。

       ```sql
       DELETE FROM fts_view WHERE b = 'dddd';

       ```

       ```sql
       DELETE tbl1 FROM fts_view JOIN tbl1 ON fts_view.a = tbl1.a AND 1 = 0;

       ```

## 相关文档

有关创建全文索引的详细信息，参见 [创建索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576029) 中的 **创建全文索引** 章节。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
