2009-08-15 8 views
1

Ich schreibe ein kleines Deployment-SQL-Skript für meine erste datenbankgesteuerte Anwendung.Hat [My] SQL eine Pre-Processor-like Facility?

Im Prozess finde ich, dass ich mich wiederhole viel, zum Beispiel:

GRANT USAGE ON *.* TO 'foo'@'localhost'; 
DROP USER 'foo'@'localhost'; 
CREATE USER 'foo'@'localhost' IDENTIFIED BY 'password'; 

Es wäre fantastisch, wenn ich eine Variable oder ein Makro zu ersetzen häufig gemeinsam vorkommen Daten nutzen könnten. Ist es möglich, etwas wie das folgende Snippet zu implementieren?

#define USER 'foo'  #or "Type USER = 'foo'" 
#define HOST 'localhost' #or "Type HOST = 'localhost'" 

GRANT USAGE ON *.* TO [email protected] 
DROP USER [email protected] 
CREATE USER [email protected] IDENTIFIED BY 'password' 

Antwort

1

Die meisten SQL-Datenbanken haben eine Art von Bind-Variablen, die Sie dafür verwenden können.

Zum Beispiel in PostgreSQL verwenden Sie den \ Befehl set in plsql:

\set user = foo 
drop user :user; 
create user :user identified by 'password'; 

Aber ich bin nicht sicher, ob MySQL so etwas haben. Es tut Variablen haben, und da der Host und Benutzer eine Zeichenfolge ist, könnten Sie in der Lage sein, so etwas zu tun:

select @user = 'foo'; 
select @host = 'localhost; 

drop user @[email protected]@host; 
create user @[email protected]@host identified by 'password'; 

Wenn Variablen mit dem Drop funktioniert nicht und Benutzer-Anweisungen erstellen, können Sie immer ändern die mysql.user Tabelle direkt, vergessen Sie nicht, flush privileges nach auszuführen.

insert into user values(host,@user,PASSWORD('some_pass'), 
     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); 
flush privileges; 
0

Sie können sicher so etwas wie tun:

SET @user='foo';