在不使用备份的情况下复制 MySQL 中表的完整结构?

jch*_*360 3 mysql backup

在 MySQL 中,如何在不使用备份的情况下复制表结构?

       jcho360> show create table actor\G
*************************** 1. row *************************** 
           Table: actor
    Create Table: CREATE TABLE `actor` (
      `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `first_name` varchar(45) NOT NULL,
      `last_name` varchar(45) NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`actor_id`),
      KEY `idx_actor_last_name` (`last_name`)
    ) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    jcho360> create table actor_copy select * from actor;
    Query OK, 200 rows affected (0.07 sec)
    Records: 200  Duplicates: 0  Warnings: 0




 jcho360> show create table actor_copy\G
    *************************** 1. row ***************************
           Table: actor_copy
    Create Table: CREATE TABLE `actor_copy` (
      `actor_id` smallint(5) unsigned NOT NULL DEFAULT '0',
      `first_name` varchar(45) CHARACTER SET utf8 NOT NULL,
      `last_name` varchar(45) CHARACTER SET utf8 NOT NULL,
      `last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

当我做类似的事情时,我会丢失结构,例如 PK、FK、index、ETC。

Der*_*ney 10

你应该能够做到:

CREATE TABLE `actor_copy` LIKE `actor`;
Run Code Online (Sandbox Code Playgroud)

获取结构,完成索引。但是外键仍然需要手动创建。

以上只会给你结构。然后,如果您愿意,您可以继续复制数据:

INSERT INTO `actor_copy` SELECT * FROM `actor`;
Run Code Online (Sandbox Code Playgroud)