我有办法从mysql中以前创建的表中自动创建表定义吗?
我使用MAMP编写和测试网站,并使用localhost进行播放,错误纠正并且通常在我通过实际主机创建数据库之前调整数据库。虽然任务不是很艰巨,但最终我花了很多时间重新创建表定义。
如果我在搜索中使用了错误的关键字,我会道歉,但每当我找到答案时,我都会收到付款产品,当我更喜欢捣乱并做一些代码时。
主要通过php和mysql管理员工作
答案 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没有这些问题。
答案 2 :(得分:-1)
在Sql server中创建没有Create Table语句的表:
Select * into NewTable from oldTable where 1=0
- 其中1 = 0不会复制数据