• Rename table语句用来重命名一个或多个表名
mysql> show tables; +------------------+ | Tables_in_course | +------------------+ | course | | dept | | dept_bak | | scores | | students | | students2 | | students3 | | students_tmp | | teacher | | teacher_backup | | v_1 | +------------------+ 11 rows in set (0.01 sec) mysql> rename table students2 to students_bak; Query OK, 0 rows affected (0.11 sec) mysql> show tables; +------------------+ | Tables_in_course | +------------------+ | course | | dept | | dept_bak | | scores | | students | | students3 | | students_bak | | students_tmp | | teacher | | teacher_backup | | v_1 | +------------------+ 11 rows in set (0.00 sec) mysql> show create table students_bak; +--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | students_bak | CREATE TABLE `students_bak` ( `sid` int(11) NOT NULL DEFAULT '0', `sname` varchar(64) DEFAULT NULL, `gender` varchar(12) DEFAULT NULL, `dept_id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec) mysql> show create table students; +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | students | CREATE TABLE `students` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `sname` varchar(64) DEFAULT NULL, `gender` varchar(12) DEFAULT NULL, `dept_id` int(11) NOT NULL, PRIMARY KEY (`sid`), UNIQUE KEY `idx_1` (`sname`), KEY `for_1` (`dept_id`), KEY `idx_123` (`sid`,`sname`), KEY `idx_124` (`sid`), KEY `idx_126` (`sname`), CONSTRAINT `for_1` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> rename table dept to dept_2; Query OK, 0 rows affected (0.14 sec) mysql> show create table students; +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | students | CREATE TABLE `students` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `sname` varchar(64) DEFAULT NULL, `gender` varchar(12) DEFAULT NULL, `dept_id` int(11) NOT NULL, PRIMARY KEY (`sid`), UNIQUE KEY `idx_1` (`sname`), KEY `for_1` (`dept_id`), KEY `idx_123` (`sid`,`sname`), KEY `idx_124` (`sid`), KEY `idx_126` (`sname`), CONSTRAINT `for_1` FOREIGN KEY (`dept_id`) REFERENCES `dept_2` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
• Rename table能将表中的数据,索引,主键定义都自动转换到新表下,但视图和对原表分配的权限不能自动转换到新表,需要手动执行
mysql> desc students; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | sid | int(11) | NO | PRI | NULL | auto_increment | | sname | varchar(64) | YES | UNI | NULL | | | gender | varchar(12) | YES | | NULL | | | dept_id | int(11) | NO | MUL | NULL | | +---------+-------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) mysql> CREATE TABLE `students_new` ( -> `sid` int(11) NOT NULL AUTO_INCREMENT, -> `sname` varchar(64) DEFAULT NULL, -> `gender` varchar(12) DEFAULT NULL, -> `dept_id` int(11) NOT NULL, -> sname2 varchar(12) -> ); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key mysql> CREATE TABLE `students_new` ( -> `sid` int(11) NOT NULL, -> `sname` varchar(64) DEFAULT NULL, -> `gender` varchar(12) DEFAULT NULL, -> `dept_id` int(11) NOT NULL, -> sname2 varchar(12) -> ); Query OK, 0 rows affected (0.10 sec) mysql> insert into students_new(sid,sname,gender,dept_id) select * from students; Query OK, 5 rows affected (0.02 sec) Records: 5 Duplicates: 0 Warnings: 0