【问题标题】:DROP Syntax error in SQLiteManagerSQLiteManager 中的 DROP 语法错误
【发布时间】:2014-01-09 11:43:08
【问题描述】:

我已经在 Firefox 浏览器中下载了 sqlite manager 应用程序并打开了 sqlite manager 应用程序。

1) 创建名为 DBSQLTEST 的数据库。

2) 创建的名为 SQLTEST 的表包含三个字段:SLNONAMEAGE

3) 插入新记录

但我想删除 sqltest 表中的“AGE”列

我使用下面的sql命令

ALTER TABLE SQLTEST DROP COLUMN AGE

SQLiteManager 消息说

SQLiteManager:可能的 SQL 语法错误:ALTER TABLE SQLTEST DROP COLUMN AGE [靠近“DROP”:语法错误] 异常名称:NS_ERROR_FAILURE 异常消息:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]

那是什么错误?

【问题讨论】:

    标签: ios sqlite sqlitemanager


    【解决方案1】:

    sqlite 在ALTER TABLE 中不支持DROP COLUMN。您只能重命名表和添加列。

    参考:http://www.sqlite.org/lang_altertable.html

    如果您需要删除列,请创建一个新表,将数据复制到那里,删除旧表并将该表重命名为其指定名称。

    【讨论】:

    • 我们怎样才能删除表格中的一列?
    • 看来 sqlite 现在确实支持 DROP COLUMN,但它有点受限。它在您链接的页面上进行了解释(可能已更新)。
    • 完成:sqlite.org/lang_altertable.html#altertabdropcol SQLite 3.35.0 引入了对ALTER TABLE DROP COLUMN 的支持。
    【解决方案2】:

    SQLite does not fully support ALTER TABLE statements。您只能重命名表或添加列。

    如果要删除列,最好的选择是创建一个不包含该列的新表,然后删除旧表以重命名新表。

    例如,假设您有一个名为“t1”的表,其中列名称为“a”、“b”和“c”,并且您想从该表中删除“c”列。以下步骤说明了如何做到这一点:

    BEGIN TRANSACTION;
    CREATE TEMPORARY TABLE t1_backup(a,b);
    INSERT INTO t1_backup SELECT a,b FROM t1;
    DROP TABLE t1;
    CREATE TABLE t1(a,b);
    INSERT INTO t1 SELECT a,b FROM t1_backup;
    DROP TABLE t1_backup;
    COMMIT;
    

    感谢 Benoit。

    【讨论】:

      【解决方案3】:

      创建表格

      CREATE TABLE SQLTEST ("SLNO" INTEGER PRIMARY KEY ,"NAME" TEXT,AGE INTEGER)

      如果要删除一列

      ALTER TABLE SQLTEST 重命名为 SQLTESTCOPY

      CREATE TABLE SQLTEST ("SLNO" INTEGER PRIMARY KEY ,"NAME" TEXT)

      INSERT INTO SQLTEST"SELECT "SLNO","NAME" FROM SQLTESTCOPY

      删除表 SQLTESTCOPY

      简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        相关资源
        最近更新 更多