准备
- 新建数据库test
- 创建两个表test1和test2字段分别为 id, name
- 需求为两个表同时添加gender和age字段
注意: 如果是需要同时添加多个字段, 只需要在拼接sql的方法中添加即可
例如:
CONCAT(
"alter table ","test", "
add COLUMN age
varchar(32) NULL, "
,“add COLUMN
gender` varchar(32) NULL”
)
表结构如下
test1
test2
方式一
添加gender字段
先根据表拼接sql,然后把结果拿出来再执行一次
- 例如我要添加gender字段
1. 先执行一下语句
SELECT
concat( 'ALTER TABLE ', table_schema, '.', table_name, ' ADD COLUMN gender varchar(32) NULL;' )
FROM
information_schema.TABLES t
WHERE
table_schema = 'test';
数据结果为
2. 然后拿出结果在执行一次
ALTER TABLE test.test1 ADD COLUMN gender varchar(32) NULL;
ALTER TABLE test.test2 ADD COLUMN gender varchar(32) NULL;
3. 查看test1和test2的表结构
test1
test2
4. 添加gender字段成功
方式二
添加age字段
方式二采用存储过程的的方式,先创建存储过程,再执行
1. 创建执行存储过程
DROP PROCEDURE IF EXISTS addColumn;
DELIMITER $$
CREATE PROCEDURE addColumn()
BEGIN
-- 定义表名变量
DECLARE s_tablename VARCHAR(100);
/*显示表的数据库中的所有表
SELECT table_name FROM information_schema.tables WHERE table_schema='databasename' Order by table_name ;
*/
#显示所有
DECLARE cur_table_structure CURSOR
FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
-- test = 数据库名称
WHERE table_schema = 'test' AND table_name NOT IN (
SELECT t.table_name FROM (
SELECT table_name,column_name FROM information_schema.columns
WHERE table_name IN (
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'test')
) t WHERE t.column_name='object_name'
);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s_tablename = NULL;
OPEN cur_table_structure;
FETCH cur_table_structure INTO s_tablename;
WHILE ( s_tablename IS NOT NULL) DO
SET @MyQuery=CONCAT("alter table `",s_tablename,"` add COLUMN `age` INT COMMENT '年龄'");
PREPARE msql FROM @MyQuery;
EXECUTE msql ;#USING @c;
FETCH cur_table_structure INTO s_tablename;
END WHILE;
CLOSE cur_table_structure;
END;
$$
#执行存储过程
CALL addColumn();
2. 查看test1呵呵test2的表结构
test1
test2
3. 添加age字段成功
参考: 方式二 https://blog.csdn.net/july_young/article/details/88738147