sql >> Database teknologi >  >> RDS >> Mysql

Kan en lagret procedure fungere med to forskellige databaser? Hvad med to servere?

Hvis vi taler om to databaser på samme server:ja, en lagret procedure kan få adgang til en anden database. Du skal sikre dig, at den bruger, under hvis privilegier proceduren køres, har de nødvendige rettigheder på hver database.

Antag for eksempel, at du har to databaser på den samme server, mydb1 og mydb2 , og at hver indeholder en tabel med navnet messages med samme struktur. Antag, at du vil tilføje en lagret procedure til mydb2 der tømmer messages tabel i mydb2 og kopierer indholdet af messages tabel i mydb1 . Du kan gøre dette:

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

Se, hvordan jeg fuldt ud har kvalificeret tabellerne med de databaser, de tilhører. Faktisk kan du argumentere for, at jeg er overivrig her, fordi vi specificerede, at denne lagrede procedure hører hjemme i mydb2 . Jeg behøver ikke tilføje mydb2 . kvalifikation. Hvis den lagrede procedure var i mydb1 database, ville jeg have brug for disse kvalifikationer, men omvendt ville jeg ikke have brug for mydb1 . hvor det vises.

For at kunne køre denne procedure (muligvis for at kunne definere den?), skal jeg sørge for, at min bruger har DELETE og INSERT privilegier på mydb2 , og også SELECT privilegier på mydb1 .

Databaser på forskellige servere lyder noget mere kompliceret.



  1. Tilslutning af PHP på Linux til Microsoft Access på en Windows Share

  2. Entity Framework + MySQL - Hvorfor er ydeevnen så forfærdelig?

  3. SQL-gruppering af krydsende/overlappende rækker

  4. CONCAT med GROUP_CONCAT i mysql