sql >> Database >  >> RDS >> Mysql

Een database hernoemen in MySQL

In sommige gevallen kan het wenselijk zijn om snel de naam van een MySQL-database te wijzigen. Terwijl er vroeger een eenvoudige RENAME DATABASE bestond commando in oudere versies van MySQL die bedoeld was om deze taak uit te voeren, RENAME DATABASE is sindsdien verwijderd uit alle nieuwere versies om veiligheidsrisico's te voorkomen.

In plaats daarvan zullen we kort een handvol optionele methoden onderzoeken die kunnen worden gebruikt om snel en veilig de naam van uw MySQL-database te wijzigen.

Dumpen en opnieuw importeren

Wanneer u met een relatief kleine database werkt, is de snelste methode doorgaans het gebruik van de mysqldump shell-opdracht om een ​​gedumpte kopie van de hele database te maken en importeer vervolgens alle gegevens in de nieuw gemaakte database met de juiste naam.

Begin met het uitgeven van de volgende mysqldump commando uit uw shell-prompt, ter vervanging van de juiste username , password , en oldDbName waarden. mysqldump wordt gebruikt om fysieke back-ups van een database te maken, zodat we deze kopie kunnen gebruiken om de gegevens weer in een nieuwe database te importeren.

$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql

We gebruiken de -p vlag onmiddellijk gevolgd door ons wachtwoord om verbinding te maken met de database (zonder spatie ertussen) en vermijd wachtwoordinvoer bij het geven van deze opdrachten. Zorg ervoor dat u de omringende aanhalingstekens laat, omdat wachtwoorden met unieke tekens anders uitvoeringsproblemen kunnen veroorzaken. De -R vlag is ook belangrijk en vertelt mysqldump om opgeslagen procedures en functies samen met de normale gegevens uit de database te kopiëren.

Gebruik vervolgens de mysqladmin commando om een ​​nieuwe database aan te maken:

$ mysqladmin -u username -p"password" create newDbName

Gebruik ten slotte, met de nieuwe database gemaakt, mysql om het dumpbestand dat we hebben gemaakt in de nieuwe database te importeren.

$ mysql -u username -p"password" newDbName < oldDbName.sql

Drie basiscommando's en uw nieuwe database is gemaakt. Zodra je hebt geverifieerd dat alles is zoals bedoeld, kun je doorgaan met het verwijderen van de oude database.

Tabellen hernoemen met InnoDB

Als u MySQL versie 5.5 (of hoger) gebruikt, gebruikt u waarschijnlijk de InnoDB-opslagengine, waardoor het hernoemen van databases vrij eenvoudig is.

Kortom, u kunt de RENAME TABLE . gebruiken commando binnen een MySQL-prompt om de databasenaam effectief te wijzigen van een bepaalde tabel terwijl de tabelnaam intact blijft. Hiervoor moet de database met de nieuwe naam echter al bestaan, dus begin met het maken van een nieuwe database met behulp van de mysqladmin shell-commando zoals hierboven te zien is.

Als we bijvoorbeeld al een catalog . hebben database die we willen hernoemen naar library , zouden we eerst de nieuwe library . maken databank:

$ mysqladmin -u username -p"password" create library

Maak nu verbinding met de mysql prompt en geef de volgende MySQL RENAME TABLE verklaring voor een tafel naar keuze:

mysql> RENAME TABLE catalog.books TO library.books;

We hebben zojuist het geheel van de books verplaatst tabel uit de catalog database naar onze nieuwe library databank. Deze opdracht kan naar wens handmatig worden uitgevoerd voor alle relevante tabellen, of we kunnen de taak vereenvoudigen met een shellscript zoals hieronder te zien is.

Een Shell-opdrachtscript gebruiken

Voor alle behalve de kleinste databases, handmatig invoeren van RENAME TABLE commando's voor elke tabel zullen niet erg praktisch of efficiënt zijn, maar gelukkig kunnen we een eenvoudig shell-commando gebruiken met behulp van de mysql hulpprogramma om alle tabellen in onze oude database te doorlopen en ze een andere naam te geven, waardoor ze naar de nieuwe database worden verplaatst.

Dit is de basisstructuur van het commando:

$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done

Dus voor onze verhuizing van de oude catalog database naar de nieuwe library database, zouden we de verklaring als volgt wijzigen:

$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done

We hebben ook een paar vlaggen aan onze commando's toegevoegd:

  • -s is de vlag voor silent mode dus er is minder output naar de shell.
  • -N voorkomt de uitvoer van kolomnamen uit de resultaten.
  • -e geeft de instructie aan die volgt op de -e vlag moet worden uitgevoerd dan is de shell gestopt. Dit betekent dat de uitspraken 'show tables' en "RENAME TABLE catalog.$table TO library.$table" worden naar wens uitgevoerd als normale SQL-instructies.

Dat is alles. Uw MySQL-database is nu effectief hernoemd.


  1. Unicode-tekens vervangen in PostgreSQL

  2. Welk SqlDbType verwijst naar varBinary(max)?

  3. Fouten in SQL Server tijdens het importeren van CSV-bestand ondanks dat varchar(MAX) voor elke kolom wordt gebruikt

  4. Hoe een kolom toevoegen als deze niet bestaat op PostgreSQL?