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

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

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

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


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