在mysql中使用prepared语句

之前遇到这样一个问题: 我想批量删除一些表, 表名是类似table_XXXX, 因此想是否有类似show tables like 'cool_%'语法的操作. 很遗憾, 没有, 但是我们可以借助prepared语句来实现这个功能.

在stackoverflow有这样的一个回答:

1
2
3
4
5
6
7
8
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name,'`') INTO @tables FROM information_schema.tables
  WHERE table_schema = 'myDatabase' AND table_name LIKE BINARY 'del%';

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

原理是使用select语句来找到要删除的表, 然后把相关drop语句保存到@tables中, 最后使用prepare方式来执行drop语句. prepared还有很多的应用, 真心学习了.

这里在额外提一下group_concat是有长度限制的, 可以通过设置group_concat_max_len来突破限制:

1
SET SESSION group_concat_max_len = 1000000;

Comments