通过连接多列MySQL

时间:2016-01-27 23:48:00

标签: mysql database oracle

我是mySQL的新手并尝试从oracle迁移到MySQL,我有一个索引需要转换为mySQL。在oracle中,我使用2列创建了这个索引:

CREATE INDEX TEST ON TABLE(COL1||'/'||COL2, COL3)

现在我想在mySQL中找到替代品。我知道我可以在我的sql中的多个列上创建索引,如:

CREATE INDEX TEST on TABLE(COL1, COL2)

但是我想在多个列上创建索引,这样我就可以使用' /'来组合COL1和COL2。分隔符并在其上创建索引。我发现我可以创建一个生成的列并在其上创建索引。基本上我会有这样的事情:

 CREATE INDEX TEST on TABLE(GENERATED_COL, COL2)

当我尝试创建此生成的列时,我不断收到生成列的语法错误。这是我创建表的语法:

CREATE TABLE PATH (
ID INT(38) NOT NULL,
PATH_PREFIX VARCHAR(2000) NOT NULL,
PATH_SUFFIX VARCHAR(255) NOT NULL,
FULLPATH VARCHAR(3000) AS (CONCAT(PATH_PREFIX,'/',PATH_SUFFIX)),
PRIMARY KEY (ID)
)

这是我的错误:

SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS (CONCAT(PATH_PREFIX,'/',PATH_SUFFIX)),
PRIMARY KEY (ID)

不确定我在这里做错了什么?如果这不是正确的方式,有人可以告诉我什么是创建索引的正确方法,如CONCAT(PATH_PREFIX,' /',PATH_SUFFIX)

1 个答案:

答案 0 :(得分:0)

从mysql v5.7.6开始,您可以创建生成的列。如果将其类型设置为stored,则可以在其上创建二级索引。从v5.7.8开始,您甚至可以在虚拟生成列上创建索引,请参阅create table上的mysql文档:

  

从MySQL 5.7.8开始,InnoDB支持虚拟的二级索引   生成的列。不支持其他索引类型。

     

可以在一个或多个虚拟列上创建辅助索引   虚拟列和非虚拟生成列的组合。   虚拟列上的辅助索引可以定义为UNIQUE。