How to rename a database

2005-11-04 Thread Jesse Castleberry
I need to rename a database.  I read somewhere that I could simply stop the
MySQL database server and rename the folder that contains the data, re-start
MySQL, and I'm good-to-go.  However, I tried this, and while it appears to
have worked initially, when I try to access one of the tables in the
database, I get the error, fccamp.activities doesn't exist.  When I rename
the folder back to fccamp_dbo, it works just fine.

So, how do I rename a database correctly?  I'm using MySQL 5.0 in a Windows
XP environment.

Thanks,
Jesse


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: How to rename a database

2005-11-04 Thread Peter Brawley

Jesse,

I need to rename a database. I read somewhere that I could simply stop the
MySQL database server and rename the folder that contains the data, 
re-start

MySQL, and I'm good-to-go. However, I tried this, and while it appears to
have worked initially, when I try to access one of the tables in the
database, I get the error, fccamp.activities doesn't exist. When I 
rename

the folder back to fccamp_dbo, it works just fine.

It's more complicated than just renaming the directory. Here is what we 
wrote for it:


CREATE PROCEDURE RenameDatabase(
 IN oldname CHAR (64), IN newname CHAR(64)
)
BEGIN
 DECLARE sname CHAR(64) DEFAULT NULL;
 DECLARE rows INT DEFAULT 1;
 DECLARE total INT DEFAULT 0;
 CREATE DATABASE IF NOT EXISTS newname;
 REPEAT
   SELECT table_name INTO sname
   FROM information_schema.tables AS t
   WHERE t.table_schema = oldname
   LIMIT 1;
   SET rows = FOUND_ROWS();
   IF rows = 1 THEN
 SET @scmd = CONCAT( 'RENAME TABLE ', oldname, '.', sname,
' TO ', newname, '.', sname );
 PREPARE cmd FROM @scmd;
 EXECUTE cmd;
 DEALLOCATE PREPARE cmd;
 SET total = total + 1;
   END IF;
 UNTIL rows = 0 END REPEAT;
 IF total  0 THEN
   SET @scmd = CONCAT( UPDATE mysql.db SET Db = ',
   newname,
   ' WHERE Db = ', oldname, ' );
   PREPARE cmd FROM @scmd;
   EXECUTE cmd;
   SET @scmd = CONCAT( UPDATE mysql.columns_priv SET Db = ',
   newname,
   ' WHERE Db = ', oldname, ' );
   PREPARE cmd FROM @scmd;
   EXECUTE cmd;
   DEALLOCATE PREPARE cmd;
   FLUSH PRIVILEGES;
 END IF;
END;

PB
http://www.artfulsoftware.com

-

Jesse Castleberry wrote:


I need to rename a database.  I read somewhere that I could simply stop the
MySQL database server and rename the folder that contains the data, re-start
MySQL, and I'm good-to-go.  However, I tried this, and while it appears to
have worked initially, when I try to access one of the tables in the
database, I get the error, fccamp.activities doesn't exist.  When I rename
the folder back to fccamp_dbo, it works just fine.

So, how do I rename a database correctly?  I'm using MySQL 5.0 in a Windows
XP environment.

Thanks,
Jesse


 




--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.362 / Virus Database: 267.12.8/161 - Release Date: 11/3/2005


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]