单表操作
复制表结构和数据
如何快速的创建与已有表结构相同的数据表?
根据前面章节的学习,有两种方式:
依据数据表,手动 CREATE TABLE 再次实现一个表的创建。
SHOW CREATE TABLE,复制此查询结果、修改表名并执行创建语句。
MySQL 提供了一种快捷的方式:复制表结构
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
{ LIKE 旧表名| (LIKE 旧表名 ) }
从“旧表名”中复制一份相同的表结构,但不会复制表中保存的数据。
“{}”表示语法在使用时可以任选其中一种,“|”表示或的意思。
复制表结构和数据
mysql> USE shop;
Database changed
mysql> CREATE TABLE mydb.mygoods LIKE shgoods;
Query OK, 0 rows affected (0.07 sec)
mysql> SHOW CREATE TABLE mydb.my_goods\G
************************* 1. row *************************
Table: my_goods
Create Table: CREATE TABLE my_goods
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品 id',
category_id
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类 id',
……此处省略部分字段
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
如何将表中的已有数据快速的添加到指定表中?
根据前面章节的学习,只有一种方式:
通过 INSERT…INTO 手动编写添加的数据内容。
MySQL 提供了一种快捷的方式:复制表数据
INSERT [INTO] 数据表名 1 [(字段列表)] SELECT [(字段列表)] FROM 数据表名 2;
数据表名 1 和数据表名 2 通常使用的是同一个表(如 my_goods 表)
可在短期内快速增加表的数据量,测试表的压力以及效率等。
从 shgoods 表中复制数据到 mygoods 表中
mysql> INSERT INTO mydb.mygoods SELECT * FROM shgoods;
Query OK, 10 rows affected (0.01 sec)
Records: 10 Duplicates: 0 Warnings: 0
mysql> INSERT INTO mydb.mygoods SELECT * FROM shgoods;
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
以上主键冲突的问题,数据复制时可以指定除 id 主键外的任意字段完成。
mysql> INSERT INTO mydb.mygoods (categoryid, name, keyword, price,
-> content) SELECT category_id, name, keyword, price, content
-> FROM sh_goods;
Query OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/7b1109e9941ae41b7d03c9b81】。文章转载请联系作者。
评论