Zastanawiam się, czy przechowywane procedury MySQL mogą działać z dwoma różnymi bazami danych na tym samym komputerze? A może są na różnych serwerach?Czy procedura składowana może działać z dwoma różnymi bazami danych? Co powiesz na dwa serwery?
Odpowiedz
Jeśli mówimy o dwóch bazach danych na tym samym serwerze: tak, procedura składowana może uzyskać dostęp do innej bazy danych. Musisz upewnić się, że użytkownik, którego uprawnienia uruchamia procedura, ma niezbędne uprawnienia do każdej bazy danych.
Załóżmy na przykład, że istnieją dwie bazy danych na tym samym serwerze: mydb1
i mydb2
, a każda z nich zawiera tabelę o nazwie messages
o tej samej strukturze. Załóżmy, że chcesz dodać procedurę przechowywaną do mydb2
, która opróżnia tabelę messages
w mydb2
i kopiuje zawartość tabeli messages
w mydb1
. Możesz to zrobić:
CREATE PROCEDURE `SynchroniseMessages`()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `mydb2`.`messages`;
INSERT INTO
`mydb2`.`messages`
SELECT * FROM `mydb1`.`messages`;
END
Zobacz, jak w pełni zakwalifikowałem tabele z bazami danych, do których należą. W rzeczywistości można twierdzić, że jestem zbyt gorliwy tutaj, ponieważ określiliśmy, że ta procedura przechowywana będzie należeć do mydb2
. Nie muszę dodawać
. Jeśli procedura przechowywana była w bazie danych mydb2
. Kwalifikator:mydb1
, potrzebowałbym tych kwalifikatorów, ale odwrotnie, nie potrzebowałbym
gdzie pojawia się.mydb1
.
Aby móc uruchomić tę procedurę (ewentualnie aby móc go zdefiniować?), To muszę się upewnić, mój użytkownik ma DELETE
i INSERT
przywileje na mydb2
, a także SELECT
przywileje mydb1
.
Bazy danych na różnych serwerach brzmią bardziej skomplikowanie.
IMHO może pracować z 2 bazami danych na jednym serwerze, ale tylko jeśli mają takie same dane logowania. Nie jest to możliwe na 2 różnych serwerach.
Procedura składowana jest wykonywana w ramach jednego połączenia z bazą danych. Wszystkie bazy danych, do których ma dostęp login połączenia, są dostępne w procedurze przechowywanej.
Po prostu użyj nazwy database.tablename notation. Zdalne bazy danych - nie znam takiego sposobu w MySQL. Jest to możliwe w MS SQL Server.
Można również użyć różnych baz danych na różnych serwerach, ale trzeba je połączyć i używać tego samego konta (na przykład aktywne konto Directory) dla obu z nich połączyć
- 1. Procedura składowana SQL LIKE
- 2. Najczęściej wykonywana procedura składowana?
- 3. Procedura składowana lub kod
- 4. Procedura składowana IF/ELSE
- 5. Dostęp% ROWTYPE z procedura składowana z Java
- 6. Oracle: procedura składowana Java wysyłająca wiadomość JMS
- 7. Co powiesz na filmy na retina @ 2x?
- 8. Procedura składowana powoduje „Polecenia z synchronizacją” na następnej zapytania
- 9. Co powiesz na wielowątkowość w Android SQLite?
- 10. Procedura składowana SQL przekazująca parametr do "zamówienia"
- 11. Procedura składowana Java Procedura przechowywana w języku PL/SQL
- 12. Entity Framework - procedura składowana wywołania z domyślnymi parametrami
- 13. Procedura składowana SQL Server Foldery/Grupowanie
- 14. Entity Framework 4 Procedura składowana Czas oczekiwania na wywołanie
- 15. Procedura składowana MySQL a złożone zapytanie
- 16. Get nazwy pól z procedura składowana z Dapper
- 17. Czy procedura składowana MS/Transact-SQL wyszukuje własną nazwę?
- 18. Procedura składowana SSIS wykorzystuje tabelę tymczasową 2008 i 2014
- 19. Czy kątomierz może działać powoli?
- 20. Różnica między dwoma datami z różnymi latami
- 21. Czy mogę uruchomić dwa serwery internetowe na tym samym komputerze?
- 22. Czy procedura składowana SQL Server może określić nazwę jej macierzystego procesu?
- 23. Czy Hadoop może działać na Nginx?
- 24. Czy Pyserial może działać z ukrytymi urządzeniami?
- 25. Optymalizowanie połączeń z bazami danych
- 26. Przykład NSAttributedString z dwoma różnymi rozmiarami czcionek?
- 27. SQL - procedura składowana z Select Statement przy użyciu IN (@Variable_CommaDelimitedListOfIDS)
- 28. Aktywa budowane dwa razy z różnymi ustawieniami, co mogę zrobić?
- 29. Singleton z wieloma bazami danych
- 30. Android: EfficientAdapter z dwoma różnymi widokami
co jeśli chcę użytkownika ** a * * aby móc wywołać procedurę, która manipuluje bazą danych ** b **, ale nie chcę, żeby użytkownik ** a ** miał te uprawnienia w bazie danych ** b ** ... na przykład kontrolowane usuwanie: I wouldn nie zezwalaj użytkownikowi ** a ** na wykonywanie dowolnych instrukcji usuwania w bazie danych ** b **, ale może chciałbym, aby mógł usunąć określone informacje określone w procedurze przechowywanej, takie jak pamięć podręczna. –
@santiago arizti, jak rozumiem, zachowanie, które opisujesz, jest już nadane przez klauzulę "SQL SECURITY DEFINER". – Hammerite
ciekawe, pozwala zobaczyć ... –