Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Триггер на DELETE / 7 сообщений из 7, страница 1 из 1
26.03.2010, 18:16
    #36545463
qpile
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер на DELETE
Здравствуйте! Я создаю базу вот такого вида :
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
26.03.2010, 18:59
    #36545548
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер на DELETE
Прочитай это: http://www.sql.ru/faq/faq_topic.aspx?fid=202

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

Вам дали ссылку на документацию, а вы что сделали? Вместо того, чтобы прочитать, выкопали статью 2005-го года, когда обсуждаемая функциональность не поддерживалась. Еще бы на Слово о полке Игореве сослались, когда компьютеров в помине не было.
...
Рейтинг: 0 / 0
26.03.2010, 22:13
    #36545701
qpile
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер на DELETE
Я пишу под Андроид..Там версия 3,5,9
...
Рейтинг: 0 / 0
26.03.2010, 22:58
    #36545732
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер на DELETE
Мда... Тогда вот примеры, выдернул кусок из одного проекта. Здесь все запросы обращаются к 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
Период между сообщениями больше года.
22.05.2013, 12:02
    #38268043
ghost404
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер на DELETE
qpile, для включения FOREIGN KEY нужно после подключения к бд выполнить запрос
Код: plsql
1.
PRAGMA foreign_keys=ON;


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


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