在MySQL容量快满的情况下,大家可以通过循环删除一些过期或者无用的数据来释放空间。以下是实现该操作的代码:
CREATE PROCEDURE delete_expired_data() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE table_name VARCHAR(50); DECLARE expire_time INT DEFAULT 30; -- 游标用于遍历所有表格 DECLARE cur CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name'; -- 遍历所有表格 OPEN cur; read_loop: LOOP FETCH cur INTO table_name; IF done THEN LEAVE read_loop; END IF; -- 如果表格名称不含tmp,且该表格的记录超期,则删除该表格的数据 IF INSTR(table_name, 'tmp') = 0 AND (SELECT COUNT(*) FROM your_database_name.`table_name` WHERE `created_at`0 THEN SET @query = CONCAT('DELETE FROM your_database_name.', table_name, ' WHERE created_at< DATE_SUB(NOW(), INTERVAL ', expire_time, ' DAY)'); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END LOOP; CLOSE cur; END;
以上的代码会遍历所有表格,并删除其中created_at字段所对应的数据超过expire_time天的记录。
需要注意的是,在使用该代码前,大家需要将语句中的“your_database_name”和“expire_time”替换为实际情况下的数据库名称和需要清理的数据超期时间(以天为单位)。