如果您有两个表(本例中只有 5 个字段):
create table table1 (field1 integer, field2 integer, field3 integer, field4 integer, field5 varchar(20));
create table table2 (field1 integer, field2 integer, field3 integer);
然后您可以使用此 SQL 查看“缺失”列:
select c1.column_name, c2.column_name
from information_schema.columns c1
left join information_schema.columns c2 on c2.table_schema=c1.table_schema and c2.table_name='table2' and c2.column_name=c1.column_name
where c1.table_schema='test' and c1.table_name = 'table1' ;
+-------------+-------------+
| COLUMN_NAME | COLUMN_NAME |
+-------------+-------------+
| field1 | field1 |
| field2 | field2 |
| field3 | field3 |
| field4 | NULL |
| field5 | NULL |
+-------------+-------------+
如果存储过程是这样创建的:
DELIMITER //
CREATE PROCEDURE AddFields (IN Table1 VARCHAR(200), IN Table2 VARCHAR(200))
BEGIN
select
CONCAT("ALTER TABLE ",Table2," ADD COLUMN ",c1.COLUMN_NAME," ",c1.column_type) as AlterStatement
from information_schema.columns c1
left join information_schema.columns c2 on
c2.table_schema=c1.table_schema and
c2.table_name=Table2 and c2.column_name=c1.column_name
where
c1.table_schema='test' and
c1.table_name = Table1 and
c2.column_name is null;
END//
DELIMITER ;
一个人可以做到:
mysql> call Addfields('Table1','Table2');
+--------------------------------------------------+
| AlterStatement |
+--------------------------------------------------+
| ALTER TABLE Table2 ADD COLUMN field4 int |
| ALTER TABLE Table2 ADD COLUMN field5 varchar(20) |
+--------------------------------------------------+
这让ALTER TABLE 语句进行更改。
可能需要进行一些更改以考虑默认值,但是....?
附加信息: