我可以从现有的sql表创建表定义吗?

时间:2014-12-26 09:54:15

标签: php mysql sql

我有办法从mysql中以前创建的表中自动创建表定义吗?

我使用MAMP编写和测试网站,并使用localhost进行播放,错误纠正并且通常在我通过实际主机创建数据库之前调整数据库。虽然任务不是很艰巨,但最终我花了很多时间重新创建表定义。

如果我在搜索中使用了错误的关键字,我会道歉,但每当我找到答案时,我都会收到付款产品,当我更喜欢捣乱并做一些代码时。

主要通过php和mysql管理员工作

3 个答案:

答案 0 :(得分:0)

您可以使用CTAS(Create Table As Select)语句轻松地对字段定义执行此操作,但不会复制键,索引等。

create table YourNewTable as
select * from YourExistingTable

或者,如果您只想要结构而不是数据:

create table YourNewTable as
select * from YourExistingTable where false

-edit -

再想一想,再次阅读你的问题,你可能正在寻找SHOW CREATE声明:

SHOW CREATE TABLE YourExistingTable

这将输出创建表所需的语句,因此您可以在主机上轻松执行该语句。这样,您可以非常轻松地将表结构从本地环境复制到主机。

请参阅SHOW CREATE TABLE statement

安装像PHPMyAdmin这样的工具可能是值得的。它将在执行查询和执行各种管理任务方面提供很大帮助。您甚至可以导出整个数据库结构,如果您也喜欢这些数据。

答案 1 :(得分:0)

我认为你正在寻找这个:

  

MySQL提供了两种基于另一个表创建表的方法:

     
      
  • CREATE TABLE ... SELECT创建一个表,并从任意SELECT语句返回的结果集中填充它。在这种情况下,   “其他表”是由...检索的行和列的集合   SELECT。

  •   
  • CREATE TABLE ... LIKE使用另一个现有表的定义创建一个空表。

  •   
mysql> CREATE TABLE t
-> (i INT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (i))
-> ENGINE = InnoDB;

CREATE TABLE ... LIKE的结果与使用CREATE TABLE的结果不同... 创建一个空表。以下任一语句都将创建一个空的 表格副本:

mysql> CREATE TABLE copy1 SELECT * FROM t WHERE 0;
mysql> CREATE TABLE copy2 LIKE t;

但是,生成的副本与原始副本保留的信息量不同 表结构:

mysql> SHOW CREATE TABLE copy1\G;
*************************** 1. row ***************************
Table: copy1
Create Table: CREATE TABLE `copy1` (
`i` int(11) NOT NULL default ‘0’
) ENGINE=MyISAM DEFAULT CHARSET=latin1

mysql> SHOW CREATE TABLE copy2\G;
*************************** 1. row ***************************
Table: copy2
Create Table: CREATE TABLE `copy2` (
`i` int(11) NOT NULL auto_increment,
PRIMARY KEY (`i`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
  

CREATE TABLE ... SELECT语句复制列名和数据   从原始表中键入,但不保留PRIMARY KEY   索引信息或AUTO_INCREMENT列属性信息。   新表也使用默认存储引擎,而不是   表t使用的存储引擎。使用CREATE TABLE创建的副本   ...... LIKE没有这些问题。

参考:http://dev.mysql.com/doc/refman/5.5/en/create-table.html

答案 2 :(得分:-1)

在Sql server中创建没有Create Table语句的表:

Select * into NewTable from oldTable where 1=0

- 其中1 = 0不会复制数据