遇到一個奇怪的需求,要備份特定資料表的資料。因為很懶所以直接從 SQL 動手。
用 show create table 複製原有資料表的 schema:
> show create table users G
***************************[ 1. row ]***************************
Table | users
Create Table | CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_email` (`email`)
) ENGINE=InnoDB
再來用 「insert into select」 的方法來從原有的資料表拉資料:
insert into backup (name, email)
select name, email from users where id in (1, 3, 5)
這個作法好像會比一次一筆資料拉還要快一些,不過要注意的是 id (或是 auto_increment) 等欄位要忽略,讓 DB 自己處理,不然之後新增資料可能會出現 duplicated keys 之類的問題。