将列定义从一个表复制到另一个表?

dat*_*.io 6 mysql ddl

我想将一列(定义,而不是数据)从一个表复制到另一个表。如果目标表中不存在该列,则添加该列,或者更好的是,如果存在,则相应地修改它。

试图谷歌,但一切似乎都是关于复制数据而不是定义,或者关于使用CREATE TABLE ... LIKE ....

到目前为止我能找到的最接近的是:

CREATE TABLE table2 AS 
SELECT field4, field7                -- only the columns you want
FROM table 
WHERE FALSE;                 -- and no data
Run Code Online (Sandbox Code Playgroud)

但我需要将列复制到现有表中。所以我试过:

ALTER TABLE table2 AS 
SELECT field4, field7                -- only the columns you want
FROM table 
WHERE FALSE;                 -- and no data
Run Code Online (Sandbox Code Playgroud)

但显然它拒绝工作。

有这样的吗?

ALTER TABLE table1 ADD COLUMN column2 LIKE table2.column5
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在 MySQL 中实现这一点吗?

小智 2

最好的方法是转储表,然后可以使用ALTER命令创建新表。

转储表会返回创建表的查询。

CREATE TABLE IF NOT EXISTS customer ( id int(11) NOT NULL AUTO_INCREMENT, customerId varchar(50) NOT NULL, firstName varchar(30) NOT NULL, middleName varchar(30) DEFAULT NULL, lastName varchar(30) CHARACTER SET utf8 COLLATE utf8_estonian_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

使用相同的方法来更改现有表,(比如说customerinfo

`ALTER TABLE customerinfo ADD COLUMN (
  customerId varchar(50) NOT NULL,
  firstName varchar(30) NOT NULL,
  middleName varchar(30) DEFAULT NULL,
  lastName varchar(30) CHARACTER SET utf8 COLLATE utf8_estonian_ci DEFAULT NULL
) 
Run Code Online (Sandbox Code Playgroud)