MySQL水平分表后如何查询所有表?
时间: 2024-05-16 16:12:41 浏览: 86
MySQL水平分表后,可以使用`UNION ALL`操作符将多个表的查询结果合并在一起,例如:
```
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
```
上述语句将查询`table1`、`table2`和`table3`三个表,并将它们的查询结果合并在一起。
如果要查询所有分表,可以使用MySQL的动态SQL语句和存储过程来实现。例如,可以编写一个存储过程来查询所有分表:
```
DELIMITER //
CREATE PROCEDURE select_all_sharded_tables()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE table_name VARCHAR(255);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT DISTINCT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME LIKE 'your_table_name%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO table_name;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql = CONCAT('SELECT * FROM ', table_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
```
上述存储过程中,使用了MySQL的游标和循环语句来遍历所有分表,并使用动态SQL语句和`PREPARE`和`EXECUTE`语句来执行查询操作。你需要将`your_database_name`和`your_table_name`替换为你的数据库名和表名前缀。然后,可以使用以下语句来调用该存储过程:
```
CALL select_all_sharded_tables();
```
阅读全文