MySQL根据表前缀批量修改、删除表

打印 上一主题 下一主题

主题 690|帖子 690|积分 2070

注意:请先调试好,以及做好备份,再执行操作。
批量修改表

批量给前缀为 xushanxiang_content_ 的表增加一个 username 的字段:
  1. SELECT CONCAT('ALTER TABLE ',table_name,' ADD username varchar(40) NULL COMMENT "用户名";') FROM information_schema.TABLES WHERE table_name LIKE 'xushanxiang\_content\_%';
复制代码
可以得到下面一些 SQL 语句列表,也就是生成了批量修改表的语句:
之后,我们再批量执行这些 SQL 语句即可。
批量执行语句

方式一、存储过程 while 循环
  1. # 参考代码:
  2. DROP PROCEDURE IF EXISTS canal_test; # 删除存储过程
  3. DELIMITER // # 设置分割符1
  4. CREATE PROCEDURE canal_test()
  5. BEGIN
  6. DECLARE i INT DEFAULT 0;
  7. WHILE i<=10 DO
  8.    update users set mileage=i;
  9. SET i = i+1;
  10. END WHILE;
  11. END
  12. //
  13. DELIMITER; # 设置分割符2
  14. CALL canal_test(); # 调用存储过程
复制代码
 批量删除

参考 sql 如下:
  1. source 1.sql;
  2. source 2.sql;
  3. source 3.sql;
复制代码
接着,参考上面的进行批量执行即可。
题外话,既然说到对数据表进行批量操作,那可能少不了数据表的复制。
数据表的复制

只复制表结构到新表
  1. source D:\mysqltest.sql
复制代码
复制表结构及数据到新表

create table 新表 select * from 旧表
复制一条数据到结构相同的表
  1. // 参考用例,可能和您的实际情况不一样
  2. $sqlArr = $this->model->all("SELECT CONCAT('ALTER TABLE ',table_name,' ADD username varchar(40) NULL COMMENT \'用户名\';') FROM information_schema.TABLES WHERE table_name LIKE 'xushanxiang\_content\_%';");
  3. // 得到一个SQL语句的数组;
  4. foreach ($sqlArr as $key => $value) {
  5.     foreach ($value as $k => $v) {
  6.         $this->model->amd($v); // 依次执行sql
  7.     }
  8. }
复制代码
复制部分字段到另一个表
  1. SELECT CONCAT('drop table ',table_name,';') FROM information_schema.TABLES WHERE table_name LIKE 'xushanxiang\_content\_%';
复制代码
出处:MySQL根据表前缀批量修改、删除表 (xushanxiang.com)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表