Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Внешний ключ / 9 сообщений из 9, страница 1 из 1
05.06.2015, 16:17
    #38977601
johnkrut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
Например у меня есть 2 таблицы, при создании строки в одной таблицы, например ID где значение будет 5, нужно чтобы в дочернем окне тоже создавалась запись, где значение у ID тоже будет 5
...
Рейтинг: 0 / 0
05.06.2015, 16:53
    #38977643
MrCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
Если нужно создавать запись дочерней таблице, можно:
* повесить триггер на мастер-таблицу, вставляющий запись в дочернюю, или обновляющий, если таковая уже есть
* делать внесение вручную в транзакции - BEGIN; INSERT 1; INSERT 2; COMMIT

В мощных движках для этих целей есть ХП, а в SQLite я бы, честно говоря, выбрал второй вариант.
...
Рейтинг: 0 / 0
05.06.2015, 17:00
    #38977650
johnkrut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
Если честно, я не понял, можно мне написать создание БД

Главная таблица

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE users (
    ID         INTEGER       PRIMARY KEY AUTOINCREMENT
                             REFERENCES Equipment (ID) ON UPDATE CASCADE,
    Name       VARCHAR (24),
    Password   VARCHAR (129),
    Mail       VARCHAR (64),
    MailAccept INTEGER (11),
    IP         VARCHAR (16),
    Day        INTEGER (11),
    Month      INTEGER (11),
    Year       INTEGER (11),
    Admin      INTEGER (11)  DEFAULT (0) 
);




Дочерняя

Код: sql
1.
2.
3.
4.
CREATE TABLE Equipment (
    ID   INTEGER PRIMARY KEY,
    Test INTEGER DEFAULT (11) 
);
...
Рейтинг: 0 / 0
05.06.2015, 17:15
    #38977664
MrCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
FOREIGN KEY (...) REFERENCES (...) надо писать в Equipments, а не в Users. Подробнее .

В первом случае нужно дописать ещё одну DDLину:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER onUsersInsert 
  AFTER INSERT 
  ON Users
BEGIN
  INSERT INTO Equipment(ID) 
  VALUES (new.ID);
END;



Во втором в БД больше ничего вносить не надо, нужно в приложении вызвать две инструкции вставки внутри одной открытой транзакции.
...
Рейтинг: 0 / 0
05.06.2015, 17:18
    #38977666
MrCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
И INTEGER(11) - это как Арзамас-16, издалека кажется прикольно, а вблизи понимаешь, что это ошибка.
...
Рейтинг: 0 / 0
05.06.2015, 17:18
    #38977667
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
johnkrutНапример у меня есть 2 таблицы, при создании строки в одной таблицы, например ID где значение будет 5, нужно чтобы в дочернем окне тоже создавалась запись, где значение у ID тоже будет 5Обычно это делается наоборот. Но если хочется, можно и ведомые таблицы обновлять.

Для создания записей в других таблицах используются триггеры.
http://sqlite.org/lang_createtrigger.html

Для внешних ключей используется ограничение foreign key. Читать тут:
http://sqlite.org/foreignkeys.html
...
Рейтинг: 0 / 0
05.06.2015, 17:23
    #38977672
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
johnkrutЕсли честно, я не понял, можно мне написать создание БДнет. ТАК писать нельзя.
В первую очередь потому что ты перепутал какая таблица главная, а как ведомая.
Если таблица users ссылается на Equipment, то Eqipment будет главной таблицей, а users ведомой. Та таблица на которую ссылаются - она мастер-таблица. Всегда, во всех учебниках, во всей документации. Еее надо создавать первой.
Потом ты можешь уже созадавать ведомые таблицы содержащие поля которые являются ссылками на мастер-таблицу.
...
Рейтинг: 0 / 0
05.06.2015, 17:28
    #38977680
johnkrut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
В общем, как сделать запрос, если добавляется запись в users то и добавляется запись и в Equipment, мне нужно только ID там и там одинаковые
...
Рейтинг: 0 / 0
05.06.2015, 17:51
    #38977709
johnkrut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешний ключ
Сделал, спасибо за ответы, я только начинаю.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Внешний ключ / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]