SQLite 数据库浏览器

问题描述 投票:0回答:1

我已经在我的 Mac 上安装了 DB Browser for SQLite。我需要创建一个 SQLITE 数据库或使用现有数据库并在数据库中创建一个名为“Ages”的表:

CREATE TABLE Ages ( 
  name VARCHAR(128), 
  age INTEGER
)

到目前为止,我成功创建了一个如下所示的表格:

CREATE TABLE Ages ( 
  name VARCHAR(128)INTEGER, 
  age INTEGER
)

如何去掉第一个“INTEGER”,以便我的表格看起来像预期的那样?

database sqlite db-browser-sqlite
1个回答
0
投票

您可以使用“执行 SQL”选项卡进行编码,然后使用:-

ALTER TABLE Ages RENAME TO Ages_old;
DROP TABLE IF EXISTS Ages;
CREATE TABLE IF NOT EXISTS Ages (name VARCHAR(128), age INTEGER);
INSERT INTO Ages SELECT * FROM Ages_old;

这将留下 Ages_old 表(您可能想要删除它)。 它还可以处理包含实际数据的 Ages 表(INSERT SQL 将数据从重命名的原始表复制到新创建的表)。

但是,没有真正的需要,因为列可以包含任何类型的数据,这是 SQLite 的灵活性功能(尽管有些人感到困惑)。

事实上,由于列类型 varchar(128)integer 包含 int,因此列类型亲和力无论如何都将是 INTEGER(同样这并不重要)。

也许考虑这个演示(使用 DBBrowser 执行):-

DROP TABLE IF EXISTS `?`;
CREATE TABLE IF NOT EXISTS `?` (x somereallystupidcolumntype,y INTEGER,z `VARCHAR(128)INTEGER`);
SELECT * FROM sqlite_master;
INSERT INTO `?` VALUES
    (x'1234567890abcdef',x'1234567890abcdef',x'1234567890abcdef'),(100,100,100),(100.1234,100.1234,100.1234),('whatever','whatever','whatever'),(100||'abc'||100.1234,null,null);
SELECT *,typeof(x),typeof(y),typeof(z) FROM `?`;
  • 表名很有趣/奇怪,但符合所有意图和目的? (附上以允许使用其他不可接受的名称)

  • col x,正如读到的类型所暗示的那样,是一种奇怪/愚蠢的非常规类型

  • col y 是 INTEGER 类型

  • col z 与您看起来拥有的类型非常接近(附上以允许它)

  • INSERT SQL 插入 5 行的所有 3 列数据

  • SELECT SQL 提取数据 asis(即所有 3 列),但添加另外 3 列,它们是这 3 列的行的数据的列类型。

运行时 DBBrowser 显示:-

  • 第一行有 BLOB 值(SQLite 工具有自己的显示 BLOB 的方式,有些工具允许自定义),并且每列的类型都是 BLOB,无论用于定义列的列类型是什么
  • 第二行很有趣/信息丰富,列 x 的类型是 REAL,但 y 和 z 是 INTEGER,这证实了 VARCHAR(128)INTEGER 如果它保存整数将是 INTEGER 类型,但 x 列将 INTEGER 视为 REAL (请参阅链接了解解释)
  • 第 3 行所有数据均为 REAL(十进制),因此类型为 REAL
  • 第 4 行所有列都是文本,因为数据是文本
  • 第 5 行 x 列中的 TEXT 数据为 TEXT,但 NULL 数据显示为 NULL 类型

您不妨参考https://sqlite.org/datatype3.html

© www.soinside.com 2019 - 2024. All rights reserved.