6.1 Modification de la structure de la base de données

Et enfin, la partie la plus délicieuse du travail avec des bases de données consiste à changer la base de données. Si vous pensez que c'est quelque chose de très simple, alors voici une anecdote pour vous sur le sujet :


The service station master, wiping his hands, hands over the car to the client and chats along the way:
- But who do you work for?
- I am a cardiac surgeon, I perform heart operations.
- And they pay a lot?
- $20,000 per operation.
- Nothing for myself ... But we, in fact, are doing the same thing, sorting out the engines, and they pay me only $ 300 ...
- Do you want to earn as much as I do?
- Want...
The surgeon starts the engine in the car and turns to the master:
- Move over!

La situation est exactement la même avec les bases de données. Vous souhaitez retirer une partie des données dans le tableau séparé ? Bon, il te faut :

  • créer un nouveau tableau
  • copier les données dans cette nouvelle table
  • supprimer les colonnes de l'ancienne table
  • modifier toutes les requêtes SQL faisant référence à l'ancienne table
  • ajouter des requêtes SQL qui accéderont à la nouvelle table
  • modifier le code Java qui fonctionnait avec les tables à l'ancienne
  • modifier les scripts de sauvegarde et de restauration, car maintenant les structures de table ne correspondent pas
  • si vous avez des données de test pour les développeurs, vous devez également les modifier

Même si en réalité c'est encore pire :

Nouvelle structure de base de données :

  • vous modifiez d'abord la structure de la table sur la machine du développeur
  • alors vous êtes convaincu qu'une telle structure est vraiment meilleure
  • approuver la nouvelle structure de la base de données

Scénarios de migration :

  • vous écrivez des scripts qui modifieront les données d'une table, etc. sur une vraie base de données
  • exécutez ces scripts sur une machine avec l'ancienne structure de base de données et voyez comment cela change
  • vérifier tous les endroits critiques de la nouvelle base

Mise à jour en vente

  • arrêter la base de données de production
  • faire une sauvegarde complète
  • exécution de scripts
  • comme il y en a généralement beaucoup sur le marché, ces scripts peuvent fonctionner pendant des heures

Vous lancez la prod et espérez que vous n'aurez pas à tout annuler.

6.2 Instruction ALTER TABLE

D'autre part, le script lui-même, qui modifie la structure de la table, est très simple. À certains égards, il est similaire à un script de création de table. Vue générale d'une demande de modification de table :

ALTER TABLE table
team 1,
team 2,
Team N

Les commandes sont très différentes, mais trois groupes principaux peuvent être distingués :

  • ADD- ajoute quelque chose au tableau
  • MODIFY- change quelque chose dans le tableau
  • DROP- supprime quelque chose dans le tableau

Et quand je dis quelque chose, il ne s'agit pas des données, mais de la structure du tableau.

Par exemple, vous décidez d'ajouter une nouvelle colonne à la table, puis vous devez exécuter la requête suivante :

ALTER TABLE table
	ADD COLUMN Name type

Écrivons une requête qui ajoutera une colonne email à notre table employee :

ALTER TABLE employee
	ADD COLUMN email  VARCHAR(10)

Changeons maintenant la longueur de la chaîne email de 10 à 100 : pour cela, nous avons besoin d'un nouveau script :

ALTER TABLE employee
	MODIFY COLUMN email VARCHAR(100)

Si vous souhaitez modifier certains attributs d'une colonne, mais pas son type, vous avez besoin de la commande ALTER COLUM . Définissons la valeur d'e-mail par défaut :

ALTER TABLE employee
	ALTER COLUMN email VARCHAR(100)  DEFAULT 'test@test.com'

Et enfin, la colonne peut être supprimée si vous n'en avez pas besoin :

ALTER TABLE employee
	DROP COLUMN email 

6.3 Ajouter et supprimer une clé primaire

Et quelques exemples plus utiles.

Disons que nous avons oublié de déclarer la colonne id comme clé primaire. Vous pouvez toujours le faire séparément via ALTER TABLE:

ALTER TABLE employee
	ADD PRIMARY KEY (email);

Le retirer est encore plus simple :

ALTER TABLE employee
	DELETE PRIMARY KEY;