使用索引创建表的SQLite错误

时间:2015-07-02 10:35:38

标签: php mysql sql sqlite ddl

我正在尝试用带有索引的PHP创建SQLite3数据库。

There is an example on dev.mysql制作如下所示的索引。

$db = new SQLite3(':memory:');

$db->exec("CREATE TABLE sales (
    kitchen_name VARCHAR(255) NOT NULL,
    amount_name VARCHAR(255),
    amount NUMERIC(15,2),
    name_key VARCHAR(255) NOT NULL,
    flag_total TINYINT(1),
    INDEX kitchen_value_key (kitchen_name,name_key)
);");

我已在online parser中运行查询,并且它将作为有效的MySQL返回。

但我一直收到错误:

SQLite3::exec(): near "INDEX": syntax error

我做错了什么?

2 个答案:

答案 0 :(得分:4)

这确实是有效的MySQL语法,但你没有使用MySQL,你使用的是SQLite,它是一个不同的RDBMS。

SQLite只是不支持在表定义中内联索引定义的语法,因此您不得不求助于使用两个单独的语句:

CREATE TABLE sales (
    kitchen_name VARCHAR(255) NOT NULL,
    amount_name VARCHAR(255),
    amount NUMERIC(15,2),
    name_key VARCHAR(255) NOT NULL,
    flag_total TINYINT(1)
);

CREATE INDEX kitchen_value_key ON sales(kitchen_name,name_key);

<强> SQLFiddle

答案 1 :(得分:2)

SQLITE不是mysql。他们在句点上有非常不同的句法规则

我假设您要在SQLITE表上创建普通索引。 将索引创建放在表创建的单独语句中。

您应该按照

上的说明操作

https://www.sqlite.org/lang_createindex.html

CREATE INDEX IF NOT EXISTS kitchen_value_key ON sales (kitchen_name, name_key)