玩龙天子 发表于 2018-9-28 12:03:50

在MYSQL中快速创建空表

今天有人问我用什么方法可以创建空表?  在MYSQL中有两种方法。
  1、create table select ...
  2、create table like ...
  第一种很多人都知道,第二种却很少人用。
  第一种有个缺点:
  取消掉原来表的有些定义。
  手册上是这么讲的:
  Someconversion of data types might occur. For example, the AUTO_INCREMENTattribute is not preserved, and VARCHAR columns can become CHARcolumns.
  不过我测试过,只会取消自增属性!(可能是版本不同吧。其他版本没有测试过!)
  第二种就不会。
  我们来看看例子:
  mysql> create table t_old (id serial, content varchar(8000) not null,`desc` varchar(100) not null) engine innodb;
  Query OK, 0 rows affected (0.01 sec)
  mysql> show create table t_old;
  +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  |Table | CreateTable                                                                                                                                                                                                |
  +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | t_old | CREATE TABLE `t_old` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL,
  UNIQUE KEY `id` (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1 row in set (0.00 sec)
  mysql> create table t_select select * from t_old where 1 = 0;
  Query OK, 0 rows affected (0.01 sec)
  Records: 0Duplicates: 0Warnings: 0
  PS:如果想要保持一样的引擎,就加上。
  这样写:create table t_select engine innodb select * from t_old where 1 = 0;
  mysql> show create table t_select;
  +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  |Table    | CreateTable                                                                                                                                                                      |
  +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | t_select | CREATE TABLE `t_select` (
  `id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
  +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1 row in set (0.00 sec)
  mysql> create table t_like like t_old;
  Query OK, 0 rows affected (0.02 sec)
  mysql> show create table t_like;
  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  |Table| CreateTable                                                                                                                                                                                                 |
  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | t_like | CREATE TABLE `t_like` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL,
  UNIQUE KEY `id` (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1 row in set (0.00 sec)

页: [1]
查看完整版本: 在MYSQL中快速创建空表