Можно ли найти строку, используя что-то другое, кроме основного ключа на SQLite?

#sql #sqlite

Вопрос:

Я хочу иметь возможность найти значение, используя либо network_id, либо имя пользователя. Тем не менее, следующий синтакс выдает ошибку более чем одного первичного ключа (как и ожидалось).

 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?

Комментарии:

1. таблица может иметь только один первичный ключ

2. @Сергей, я в курсе, мне просто интересно, как я мог бы сделать что-то подобное в рамках Sql

3. извините, но «найти значение с помощью network_id или имени пользователя» не имеет отношения к первичному ключу.

4. Вам вообще не нужен ключ. С select * from player where network_id = 123 вами находите строки по сетевому идентификатору, а с select * from player where username = 'Mr. X' вами находите строки по имени пользователя. Вы можете предоставить индексы, которые ускоряют такие запросы. SQLite автоматически предоставляет такие индексы для первичных ключей и столбцов с уникальным ограничением, но вы также можете создать их самостоятельно.

5. Должен ли идентификатор network_id быть уникальным в вашей таблице (т. Е. Это на самом деле идентификатор игрока) или у нескольких игроков может быть один и тот же сетевой идентификатор?

Ответ №1:

Первичный ключ имеет три компонента для своего определения:

  • NOT NULL
  • UNIQUE
  • Только по одному на стол

Вот почему у вас не может быть больше одного. Но у вас может быть любое количество NOT NULL UNIQUE столбцов:

 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)
);