如何在SQLite中创建一个没有列的表?

19
我想在sqlite3中创建一个没有列的表。在postgres数据库中是可能的,但在sqlite3中不行。有没有办法实现这个,或者它根本不支持(也许不符合SQL标准?)我已经检查了sqlite3的CREATE TABLE语法,似乎至少必须有一列,但也许我漏掉了什么?

1
我很好奇一个零列表解决了什么问题。能详细说明一下吗? - Tim
我正在做宠物项目并编写测试。为了进行测试,我可以在Postgres中创建空表,但相同的自动化测试在SQLite中失败了。因此,我想确定我是否没有做错任何事情。由于 SQL 标准不支持空表,所以我不需要担心它。 - gruszczy
6
@Tim可能希望创建空表,然后逐步添加列。 - entonio
4个回答

17

SQLite 不支持零列表。 标准 SQL 也不支持。


2
有趣的是,在PostgreSQL中这是可能的(https://blog.jooq.org/2017/03/17/creating-tables-dum-and-dee-in-postgresql/)。 - Lukas Eder
@LukasEder 那...除了完全学术目的之外,似乎并没有什么用处。PostgreSQL甚至不需要FROM子句,因此它不需要像Oracle那样的DUAL表。 - Bacon Bits
@BaconBits:你可以在这些表中使用一些很酷的谓词逻辑来实现连接。没有人说这不是学术性的 :) - Lukas Eder
1
在Access中也可以创建零列表,如 CREATE TABLE NoColumns;。有趣的是SQLite3不支持此功能。 - AlainD

3

我有一个类似的问题,因为我想要一个只包含rowid字段的表。虽然你无法创建没有列的表,但可以使用以下代码创建只有rowid字段作为主键的表:

CREATE TABLE tablename (rowid INTEGER PRIMARY KEY) WITHOUT ROWID;

1

你可以只创建一个ID列而不是创建空表格来创建表格:

def create_table(DATABESE_NAME):
    conn = sqlite3.connect(DATABESE_NAME)
    c = conn.cursor()
    c.execute(''' CREATE TABLE IF NOT EXISTS rate_table(
    id INTEGER PRIMARY KEY AUTOINCREMENT) ''')
    conn.commit()
    conn.close()

-1
在SQLite中,您不能创建没有列的表,但您可以轻松地创建一个只有一个列的表,该列是空字符串,并且具有BLOB类型,如下所示。*如果不指定类型,则根据文档,该类型为BLOB类型。
CREATE TABLE person ("");

或者:

CREATE TABLE person ([]);

或者:

CREATE TABLE person (``);

而且,如果你想的话,你可以像下面展示的那样添加一行:
INSERT INTO person ("") values ('John');

或者:

INSERT INTO person ([]) values ('John');

或者:

INSERT INTO person (``) values ('John');

或者:

INSERT INTO person values ('John');

问题是:“如何在SQLite中创建一个没有列的表?”你的代码创建了一个只有一个列名为空字符串的表:https://dbfiddle.uk/nrvQii19 - undefined
我不知道是否可以将空字符串称为列。在SQLite中是否可能有一个没有类型的列? - undefined
是的,这是可能的:https://dbfiddle.uk/S_g9MFJM - undefined
我能在SQLite文档中查看关于无类型列的解释吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接