使用TCL:在内存临时表中创建表时,Sqlite语法错误

时间:2018-09-22 17:29:03

标签: sqlite create-table

使用tcl和sqlite3我想在内存中创建一个临时表。试试看:

package require sqlite3
sqlite3 DB  [file normalize X:\memdbtest.db]

DB eval {
    ATTACH DATABASE ':memory:' AS memdb;
    CREATE TEMP TABLE memdb.values (val TEXT);
}

给我一​​个错误:“值”附近:语法错误 我猜这与“值”是sqlite中的保留关键字有关。将上面的代码更改为:

    DB eval {
        ATTACH DATABASE ':memory:' AS memdb;
        CREATE TEMP TABLE memdb.things (val TEXT);
    }

给我一​​个错误“临时表名必须不合格”

但是跳过memdb。前面的事情会将新表放到磁盘数据库的常规数据库中。...我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

临时表进入temporary database(名为temp)中。 虽然该数据库存储在磁盘文件中,但是直到缓存溢出(因为临时数据库不需要因崩溃而保持持久性),才真正写入该文件。

如果要将表放入其他数据库,请不要使用CREATE TEMP TABLE,而要使用普通的CREATE TABLE

CREATE TABLE things([...]);        -- creates the table in the DB "main"
CREATE TABLE memdb.things([...]);  -- creates the table in the specified DB
CREATE TEMP TABLE things([...]);   -- creates the table in the DB "temp"
CREATE TABLE temp.things([...]);   -- creates the table in the DB "temp"