Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Jak utworzyć trigger do innej bazy przy updacie ?
kuna11
post 7.10.2013, 11:27:29
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 15.09.2013

Ostrzeżenie: (0%)
-----


Chciałbym aby przy aktualizacji (update) tabeli 't1' z bazy nr 1 został wykonany insert do tabeli 't2' bazy nr 2.
Jak zrobić taki wyzwalacz ?
Go to the top of the page
+Quote Post
b4rt3kk
post 7.10.2013, 11:36:22
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Najpierw piszesz funkcję, która zajmie się wrzucaniem odpowiednich danych do T2. Następnie przypisujesz ją jako trigger ON UPDATE do tabeli T1.

PS. Jeśli baza znajduje się na innym serwerze operacja taka jest niewykonalna.

Ten post edytował b4rt3kk 7.10.2013, 11:38:02


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kuna11
post 7.10.2013, 21:17:00
Post #3





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 15.09.2013

Ostrzeżenie: (0%)
-----


Wyskrobałem coś takiego:
  1. DROP TRIGGER IF EXISTS `historia_aktualizacji`;
  2. DELIMITER //
  3. CREATE TRIGGER `historia_aktualizacji` AFTER UPDATE ON `T1`
  4. FOR EACH ROW BEGIN
  5. IF NEW.nazwa != OLD.nazwa THEN
  6. INSERT INTO T2 (`id`, `tytul`, `data`) VALUES (NEW.page_id, NEW.nazwa, NEW.date);
  7. END IF;
  8. END
  9. //
  10. DELIMITER


Najbardziej zastanawia mnie ta część :

INSERT INTO T2 (`id`, `tytul`, `data`) VALUES (OLD.page_id, OLD.nazwa, OLD.date);

Aktualizacja ma być wtedy gdy w tabeli T1 zmieni się 'nazwa', ale w tabeli T2 nie ma pola 'nazwa' tylko 'tytuł' i analogicznie zamiast 'page_id' jest 'id', czy w takim wypadku, ten kod który stworzyłem będzie działał prawidłowo ?

No i najważniejsze, gdzie mam podać info, że tabela T2 należy do innej bazy (wszystkie bazy na jednym serwerze) ?


Ten post edytował kuna11 7.10.2013, 21:17:16
Go to the top of the page
+Quote Post
mmmmmmm
post 8.10.2013, 07:45:03
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


INSERT INTO `nazwa bazy`.T2

Ten post edytował mmmmmmm 8.10.2013, 07:45:26
Go to the top of the page
+Quote Post
b4rt3kk
post 8.10.2013, 10:56:08
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(kuna11 @ 7.10.2013, 22:17:00 ) *
Wyskrobałem coś takiego:
  1. DROP TRIGGER IF EXISTS `historia_aktualizacji`;
  2. DELIMITER //
  3. CREATE TRIGGER `historia_aktualizacji` AFTER UPDATE ON `T1`
  4. FOR EACH ROW BEGIN
  5. IF NEW.nazwa != OLD.nazwa THEN
  6. INSERT INTO T2 (`id`, `tytul`, `data`) VALUES (NEW.page_id, NEW.nazwa, NEW.date);
  7. END IF;
  8. END
  9. //
  10. DELIMITER


Najbardziej zastanawia mnie ta część :

INSERT INTO T2 (`id`, `tytul`, `data`) VALUES (OLD.page_id, OLD.nazwa, OLD.date);

Aktualizacja ma być wtedy gdy w tabeli T1 zmieni się 'nazwa', ale w tabeli T2 nie ma pola 'nazwa' tylko 'tytuł' i analogicznie zamiast 'page_id' jest 'id', czy w takim wypadku, ten kod który stworzyłem będzie działał prawidłowo ?

No i najważniejsze, gdzie mam podać info, że tabela T2 należy do innej bazy (wszystkie bazy na jednym serwerze) ?


Nie będzie żadnego problemu, kod będzie działał prawidłowo pod warunkiem, że wawrtości OLD mają typ zgodny z typami kolumn tabeli T2. A co do wyboru bazy zrób tak jak napisał mmmmmm.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.05.2025 - 09:30