2010-08-20 4 views
2

Existe-t-il un moyen de joindre une métadonnée à une base de données MySQL? J'essaye d'écrire le code pour mettre à jour automatiquement le schéma de base de données chaque fois qu'une mise à niveau de code l'exige. Cela nécessite le stockage d'une seule valeur entière - la version du schéma. Je pourrais bien sûr créer une table entière pour cela, mais cela semble être trop pour un simple nombre.Joindre des métadonnées simples à une base de données MySQL

Répondre

2

Vous pouvez utiliser les commentaires de table pour stocker la version:

ALTER TABLE table1 COMMENT = '1.4'; 

Vous devez regex pour obtenir le commentaire de cette:

SHOW CREATE TABLE table1; 
/COMMENT='(.*)'/ 
+0

C'est parfait! Merci! – zildjohn01

1

Pour répondre à la question intitulée, qui est Pour les métadonnées pour l'ensemble de la base de données et non pour les tables individuelles, vous disposez de plusieurs choix, en fonction des privilèges dont vous disposez.

La route la plus directe consiste à créer une fonction stockée, qui requiert le privilège CREATE ROUTINE. par exemple.

mysql> CREATE FUNCTION `mydb`.DB_VERSION() RETURNS VARCHAR(15) 
     RETURN '1.2.7.2861'; 
Query OK, 0 rows affected (0.03 sec) 

mysql> SELECT `mydb`.DB_VERSION(); 
+--------------+ 
| DB_VERSION() | 
+--------------+ 
| 1.2.7.2861 | 
+--------------+ 
1 row in set (0.06 sec) 

Si vos privilèges vous limiter seulement la création de tables, vous pouvez créer une table simple et mettre les métadonnées comme valeurs par défaut. Il n'est pas nécessaire de stocker des données dans la table.

mysql> CREATE TABLE `mydb`.`db_metadata` (
    `version` varchar(15) not null default '1.2.7.2861'); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SHOW COLUMNS FROM `mydb`.`db_metadata`; 
+---------+-------------+------+-----+------------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+---------+-------------+------+-----+------------+-------+ 
| version | varchar(15) | NO |  | 1.2.7.2861 |  | 
+---------+-------------+------+-----+------------+-------+ 
1 row in set (0.00 sec) 
Questions connexes