Экспо sqlite иностранный ключ

Если вы используете внешние инструменты (меню «Выполнить» / «Внешние инструменты» или значок рядом с значками «Запуск / отладка» на панели инструментов), вы можете использовать любые сценарии или что угодно. Сценарии могут дать вам повышенные права или что-то еще.

С другой стороны, таким образом отладка приложения может стать очень сложной, так как ни команды Run, ни Debug не связаны с этой настройкой внешнего инструмента. Возможно, можно подключить отладчик Eclipse приложения, но я не знаю, как это возможно.

0
задан Praneeth Rajarikam 19 March 2019 в 07:05
поделиться

1 ответ

У вас будет две таблицы, возможно, с столбцом в качестве псевдонима столбца rowid , это

, например

CREATE TABLE persons (
    personid INTEGER PRIMARY KEY, 
    personname TEXT
);

CREATE TABLE orders (
    orderid INTEGER PRIMARY KEY, 
    ordername TEXT, 
    person_reference INTEGER REFERENCES persons(personid)
);
  • Обратите внимание , что вы должны включить обработку внешнего ключа, например, выполнив PRAGMA foreign_keys = ON; (или истина). См. PRAGMA foreign_keys
  • в кодировании SQLite column_name INTEGER PRIMARY KEY, который определяет этот столбец как псевдоним столбца rowid , и если значение не является для столбца при вставке, тогда будет назначено целочисленное значение. Начальное значение для первой строки будет равно 1, последующие значения обычно будут на 1 больше, чем наибольшее значение rowid (прочитайте ссылку выше, чтобы узнать, почему слово обычно использовалось) .

Если вы затем попытаетесь вставить Орден для несуществующего лица, вы получите конфликт по внешнему ключу.

Альтернативой определению уровня столбца было бы определение внешнего ключа (ей) на уровне таблицы, например

CREATE TABLE orders (
    orderid INTEGER PRIMARY KEY, 
    ordername TEXT, 
    person_reference INTEGER, 
    FOREIGN KEY (person_reference) REFERENCES persons(personid)
);

В качестве примера рассмотрим следующее: -

INSERT INTO persons (personname) VALUES 
    ('Fred'),
    ('Mary'),
    ('Sue'),
    ('Tom')
;
INSERT INTO orders (ordername, person_reference) VALUES
    ('Order 1 for Fred',1),
    ('Order 2 for Sue',3),
    ('Order 3 for Fred',1),
    ('Order 4 for Mary',2)
;   
INSERT into orders (ordername, person_reference) VALUES
    ('Order 5 for nobody',100);

В результате получится: -

INSERT INTO persons (personname) VALUES ('Fred'),('Mary'),('Sue'),('Tom')
> Affected rows: 4
> Time: 0.453s


INSERT INTO orders (ordername, person_reference) VALUES
  ('Order 1 for Fred',1),('Order 2 for Sue',3),('Order 3 for Fred',1),('Order 4 for Mary',2)
> Affected rows: 4
> Time: 0.084s


INSERT into orders (ordername, person_reference) VALUES
  ('Order 5 for nobody',100)
> FOREIGN KEY constraint failed
> Time: 0s

, т.е. последний, поскольку в таблице лиц нет строки с персоной 100, то последняя вставка (на собственной демонстрации) завершается неудачей.

Вы можете обратиться к Поддержка внешнего ключа SQLite

.
0
ответ дан MikeT 19 March 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: