Nếu chúng ta đang nói về hai cơ sở dữ liệu trên cùng một máy chủ:vâng, một thủ tục được lưu trữ có thể truy cập cơ sở dữ liệu khác. Bạn phải đảm bảo rằng người dùng có đặc quyền mà thủ tục đang được chạy có các đặc quyền cần thiết trên mỗi cơ sở dữ liệu.
Ví dụ:giả sử bạn có hai cơ sở dữ liệu trên cùng một máy chủ, mydb1 và mydb2 và mỗi bảng chứa một bảng có tên messages với cấu trúc giống nhau. Giả sử bạn muốn thêm một thủ tục được lưu trữ vào mydb2 sẽ làm trống messages bảng trong mydb2 và sao chép nội dung của messages bảng trong mydb1 . Bạn có thể làm điều này:
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
Xem cách tôi đã hoàn toàn đủ điều kiện cho các bảng với cơ sở dữ liệu mà chúng thuộc về. Trên thực tế, bạn có thể tranh luận rằng tôi đang quá sốt sắng ở đây, bởi vì chúng tôi đã chỉ định rằng thủ tục được lưu trữ này sẽ thuộc về mydb2 . Tôi không cần thêm vòng loại. Nếu thủ tục được lưu trữ trong mydb2 . mydb1 cơ sở dữ liệu, tôi sẽ cần những định tính đó, nhưng ngược lại, tôi sẽ không cần nơi nó xuất hiện. mydb1 .
Để có thể chạy thủ tục này (có thể để có thể xác định nó?), Tôi cần đảm bảo rằng người dùng của mình có DELETE và INSERT đặc quyền trên mydb2 và cả SELECT đặc quyền trên mydb1 .
Cơ sở dữ liệu trên các máy chủ khác nhau nghe có vẻ phức tạp hơn.