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.