powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Триггер на DELETE
7 сообщений из 7, страница 1 из 1
Триггер на DELETE
    #36545463
qpile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Я создаю базу вот такого вида :
myDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ categories
+ " (category_id PRIMARY KEY,parent_id INT,name text,type boolean,FOREIGN KEY(parent_id) REFERENCES categories(category_id));");

myDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ accounts
+ " (account_id PRIMARY KEY , name text);");


myDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ tranzactions
+"(transaction_id primary key ,account_id int,category_id int,t_date date,amount float,"
+"FOREIGN KEY(account_id) REFERENCES accounts(account_id),FOREIGN KEY(category_id) REFERENCES categories(category_id));");


Теперь хочу написать триггер, который при удалении поля в categories, удалял при этом все поля в таблицы tranzaction , где поля в catagory id такие же, которые удаляются..Спасибо..
...
Рейтинг: 0 / 0
Триггер на DELETE
    #36545548
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитай это: http://www.sql.ru/faq/faq_topic.aspx?fid=202

Триггер не нужен. Нужно при объявлении внешнего ключа указать on delete cascade . Подробнее читай букварь: http://www.sqlite.org/foreignkeys.html
...
Рейтинг: 0 / 0
Триггер на DELETE
    #36545627
qpile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Триггер на DELETE
    #36545684
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
qpile проблема Foreign key в SQLITE

Вам дали ссылку на документацию, а вы что сделали? Вместо того, чтобы прочитать, выкопали статью 2005-го года, когда обсуждаемая функциональность не поддерживалась. Еще бы на Слово о полке Игореве сослались, когда компьютеров в помине не было.
...
Рейтинг: 0 / 0
Триггер на DELETE
    #36545701
qpile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пишу под Андроид..Там версия 3,5,9
...
Рейтинг: 0 / 0
Триггер на DELETE
    #36545732
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Мда... Тогда вот примеры, выдернул кусок из одного проекта. Здесь все запросы обращаются к view, триггеры на которых и реализуют всю необходимую логику. Если вы напрямую к таблицам обращаетесь, не используйте "instead of", а делайте триггеры "before" или "after".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
CREATE TRIGGER view_user_service_hw_insert instead of insert on view_user_service_hw
begin
    -- must be defined user_service_id and group_name
    select RAISE (ABORT,'Услуга не найдена')
      WHERE (select count(id) from user_service where id=NEW.user_service_id and delete_date IS NULL)= 0 ;

    select RAISE (ABORT,'Указанное оборудование уже подключено к услуге')
      WHERE (select count(id) from view_user_service_hw where user_service_id=NEW.user_service_id
 and group_name=cast(NEW.group_name as text) and delete_date IS NULL)> 0 ;

    insert into user_service_hw
      (user_service_id,hw_id)
    select
      NEW.user_service_id, id from hw_telephony_number where group_name=cast(NEW.group_name as text) and
        'telephony_number'=(select hw_name from view_user_service where id=NEW.user_service_id);

    insert into user_service_hw
      (user_service_id,hw_id)
    select
      NEW.user_service_id, id from hw_telephony_port where group_name=cast(NEW.group_name as text) and
        'telephony_port'=(select hw_name from view_user_service where id=NEW.user_service_id);

    ...
end;
CREATE TRIGGER view_user_service_insert instead of insert on view_user_service
begin
  insert into user_service (user_contract_id,service_id,note,is_active,is_main)
    values (NEW.user_contract_id,NEW.service_id,NEW.note,NEW.is_active,NEW.is_main);
end;
CREATE TRIGGER view_user_service_planner_delete instead of delete on view_user_service_planner
begin
  update user_service_planner set delete_date=julianday('now') where id=OLD.id and delete_date is null;
end;
CREATE TRIGGER view_user_service_planner_insert instead of insert on view_user_service_planner
begin
  insert into user_service_planner (user_service_id,action, date)
    values (NEW.user_service_id,NEW.action, NEW.date);
end;
CREATE TRIGGER view_user_service_planner_update instead of update on view_user_service_planner
begin
  update user_service_planner set
    user_service_id=NEW.user_service_id,
    action=NEW.action,
    date=NEW.date
  where id=OLD.id;
end;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Триггер на DELETE
    #38268043
ghost404
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qpile, для включения FOREIGN KEY нужно после подключения к бд выполнить запрос
Код: plsql
1.
PRAGMA foreign_keys=ON;


http://www.sqlite.org/pragma.html#pragma_foreign_keys
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Триггер на DELETE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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