Récemment, j'ai dû faire face à certaines limitations de mon fournisseur de base de données qui ne prend pas en charge le renommage des tables. J'ai donc dû dupliquer une table manuellement.
La base de données de ma plateforme SaaS est hébergée sur Planetscale. La société fournit une base de données sans serveur compatible MySQL. Grâce à sa nature sans serveur, vous pouvez bénéficier de la puissance du partitionnement horizontal, des modifications de schéma non bloquantes et de nombreuses fonctionnalités de base de données plus puissantes sans avoir à les implémenter. Et une excellente expérience de développeur.
D'un autre point de vue, vous devez faire face à certaines contraintes concernant les modifications de schéma. Ces limitations sont nécessaires pour garantir la cohérence dans un environnement fragmenté.
Ils ont fait beaucoup de progrès depuis que je suis devenu client (il y a presque deux ans), comme le support de la contrainte Foreign Key : https://planetscale.com/docs/concepts/foreign-key-constraints
Inspector est une application Laravel. En utilisant les migrations Laravel, je pourrais utiliser la fonction rename pour simplement changer le nom d'une table :
Schema::rename('from', 'to');
Planetscale ne prend pas en charge le renommage des tables de manière native. J'ai donc dû trouver une solution de contournement pour accomplir la tâche.
Pour être honnête, renommer une table est une opération assez rare. Pour moi, c'était à cause d'un chevauchement de noms entre les entités "Projets" et "Applications". J'ai dû renommer Projets -> Applications.
Il existe deux façons de dupliquer une table dans MySQL.
Vous pouvez dupliquer uniquement la structure de la table (colonnes, clés, index, etc.) sans données, en utilisant CREATE TABLE … LIKE :
CREATE TABLE applications LIKE projects;
Le résultat est la création de la table des applications avec exactement la même structure que la table des projets d'origine, mais SANS données.
Pour importer également des données, vous pouvez exécuter une deuxième instruction comme INSERT INTO … SELECT :
INSERT INTO applications SELECT * FROM projects;
Faites attention à exécuter cette instruction sur de grandes tables car cela peut prendre beaucoup de temps et de ressources serveur.
La deuxième option consiste à dupliquer uniquement les définitions de colonnes et à importer les données dans une seule instruction à l'aide de CREATE TABLE … AS SELECT :
CREATE TABLE applications AS SELECT * FROM projects;
La nouvelle table des applications hérite uniquement des définitions de colonnes de base de la table des projets. Il ne duplique pas les contraintes de clé étrangère, les index et les définitions d'auto_increment.
Cette option peut être utile lorsque vous disposez des noms d'index et de clés liés au nom de la table. En changeant le nom de la table, vous devez remplacer les noms des contraintes. Vous feriez mieux de ne pas les importer du tout et de tout recommencer.
La base de données est toujours un sujet brûlant pour les développeurs, à tout moment. Vous pouvez trouver d’autres ressources techniques sur le blog. Voici les articles les plus populaires sur le sujet :
Inspector est un outil de surveillance de l'exécution de code spécialement conçu pour les développeurs de logiciels. Vous n'avez pas besoin d'installer quoi que ce soit au niveau du serveur, installez simplement le package composer et vous êtes prêt à partir.
Contrairement à d'autres plates-formes complexes tout-en-un, Inspector est extrêmement simple et compatible avec PHP. Vous pouvez essayer notre package Laravel ou Symfony.
Si vous recherchez une automatisation efficace, des informations approfondies et la possibilité de transférer des alertes et des notifications dans votre environnement de messagerie, essayez Inspector gratuitement. Enregistrez votre compte.
Ou apprenez-en plus sur le site : https://inspector.dev
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3