【问题标题】:Is it possible to find the row using something other than the primaryKey on SQLite?是否可以使用 SQLite 上的 primaryKey 以外的其他内容找到该行?
【发布时间】:2021-11-16 19:09:32
【问题描述】:

我希望能够使用 network_id 或用户名找到值。 然而,下面的 sintax 给出了多个主键的错误(如预期的那样)。

CREATE TABLE Player(
    network_id TEXT not null,
    username varchar2(50) not null,
    value INTEGER,
    CONSTRAINT player_pk1 PRIMARY KEY (username),
    CONSTRAINT player_pk2 PRIMARY KEY (network_id)

);

有没有办法在 Sqlite 中做到这一点?

【问题讨论】:

  • 表只能有一个主键
  • @Sergey,我知道,我只是想知道如何在 Sql 范围内完成类似的事情
  • 对不起,“使用network_id或用户名查找值”与主键无关。
  • 您根本不需要钥匙。使用select * from player where network_id = 123,您可以通过网络ID 找到行,使用select * from player where username = 'Mr. X',您可以通过用户名找到行。您可以提供加快此类查询的索引。 SQLite 自动为具有唯一约束的主键和列提供此类索引,但您也可以自己创建它们。
  • network_id 在您的表中是否应该是唯一的(即这实际上是玩家 ID)还是多个玩家可以拥有相同的网络 ID?

标签: sql sqlite


【解决方案1】:

主键的定义包含三个组成部分:

  • NOT NULL
  • UNIQUE
  • 每桌只有一个

这就是为什么你不能拥有多个。但是你可以拥有任意数量的NOT NULLUNIQUE 列:

CREATE TABLE Player(
    network_id TEXT not null,
    username varchar2(50) not null,
    value INTEGER,
    CONSTRAINT player_pk1 PRIMARY KEY (username),
    CONSTRAINT unq_player_network_id UNIQUE (network_id)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-06-06
    • 2014-08-07
    • 1970-01-01
    • 2021-10-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多