MySQL - 复制数据表

时间:2023-03-08 16:25:37

假设现在有张数据表 users:

CREATE TABLE users (
userid INT(10) UNSIGNED NOT NULL,
username VARCHAR(100) UNIQUE,
passwd VARCHAR(100) DEFAULT '',
PRIMARY KEY (userid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

方法一:

1. 复制数据表及其数据

CREATE TABLE users_bak_01 SELECT * FROM users;

2. 复制数据表但不复制数据

CREATE TABLE users_bak_02 SELECT * FROM users WHERE 0;

注意:这种方法无法复制旧表 users 的主键和索引,使用 SHOW CREATE TABLE 语句检查:

SHOW CREATE TABLE users_bak_01;

-- 结果 --
CREATE TABLE `users_bak_01` (
`userid` int(10) unsigned NOT NULL,
`username` varchar(100) DEFAULT NULL,
`passwd` varchar(100) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

方法二:

1. 只复制表结构而不复制表数据

CREATE TABLE users_bak_03 LIKE users;

2. 既复制表结构又复制表数据

CREATE TABLE users_bak_04 LIKE users;
INSERT INTO users_bak_04 SELECT * FROM users;

这种方法能够完全地复制旧表 users 的结构,使用 SHOW CREATE TABLE 语句检查:

SHOW CREATE TABLE users_bak_03;

-- 结果 --
CREATE TABLE `users_bak_03` (
`userid` int(10) unsigned NOT NULL,
`username` varchar(100) DEFAULT NULL,
`passwd` varchar(100) DEFAULT '',
PRIMARY KEY (`userid`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8