有没有办法在一个查询中的多个表中更改具有相同列类型的相同列名?
类似的东西:
ALTER TABLE
(SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'data_by_%_month_%'
AND TABLE_SCHEMA='db_name')
MODIFY column1 INT(20) NOT NULL;
答案 0 :(得分:1)
不,不仅仅是ALTER TABLE
。期望ALTER TABLE
语句接收一个表。
见the docs。它不期望在那里表达。
您当然可以编写一个程序,根据您的ALTER TABLE
查询创建多个SELECT
语句。
答案 1 :(得分:0)
您可以使用存储过程执行此操作。
示例强>:
测试表结构 :
drop table if exists so.tbl_so_q23631366_1;
drop table if exists so.tbl_so_q23631366_2;
create table so.tbl_so_q23631366_1( column1 varchar(10) );
create table so.tbl_so_q23631366_2( column1 text );
存储过程 :
drop procedure if exists modify_column;
delimiter //
create procedure modify_column()
begin
declare no_more_to_fetch boolean default false;
declare alter_table_string varchar(1024) default '';
declare alter_stmts_crsr cursor for
select concat( 'alter table ', table_name
, ' modify column1 INT(20) NOT NULL default 0;' )
from information_schema.tables
where table_name like 'tbl_so_q23631366%' -- 'data_by_%_month_%'
and table_schema='so'; -- 'db_name';
declare continue handler for not found
set no_more_to_fetch = true;
open alter_stmts_crsr;
Result_Set: loop
fetch alter_stmts_crsr into alter_table_string;
if( no_more_to_fetch ) then
leave Result_Set;
end if;
-- un comment following line to debug
-- select alter_table_string;
set @sql := alter_table_string;
prepare stmt from @sql;
execute stmt;
drop prepare stmt;
end loop Result_Set;
close alter_stmts_crsr;
end;
//
delimiter ;
调用存储过程 :
call modify_column;
请参阅修改后的表格结构 :
desc tbl_so_q23631366_1; desc tbl_so_q23631366_2;
答案 2 :(得分:-2)
没有。您只能在ALTER TABLE
子句中列出一个表名,但您可以更改表中的多个项:
ALTER TABLE t2 DROP COLUMN c,DROP COLUMN d;