当特定列中的所有值都等于“DONE”时,MYSQL 删除表

时间:2021-03-15 12:16:37

标签: mysql database raspberry-pi

我正在编写 MYSQL,我在 Raspberry PI 4 上使用 Python。

当我的 status_s 列中的所有值都等于“DONE”时,我需要删除表。我无法弄清楚如何在特定条件下删除表。可以在此处找到 MYSQL 表进行测试: https://www.db-fiddle.com/f/siZmmKWLjRDdpYX6deEPYF/1

最初,status_s 值不是“DONE”。当我的程序运行时,值会更新,最终所有值都将“完成”,此时,我不想再拥有这张表,因为它并不重要。 提前致谢

UPDATE 添加 Python 程序片段

def update_data_when_complete(conn,table_name):
    cur = conn.cursor()
    sql = "SELECT COUNT(DISTINCT(ID)) = SUM(Status = 'DONE') FROM {table}"
    cur.execute(sql.format(table=table_name))
    complete_result = cur.fetchone()
    conn.commit()
    #print("COmplete result = ",complete_result[0])
    # if complete_result[0] is 1 here, all rows are "DONE" and must delete table after few minutes
    if(complete_result[0] == 1):
        sql = "DROP TABLE {table}"
        cur.execute(sql.format(table=table_name))
        conn.commit()
    else:
        print("Table not fully complete yet")

1 个答案:

答案 0 :(得分:0)

使用Event Scheduler

创建事件过程:

CREATE EVENT remove_temptable
ON SCHEDULE
EVERY 1 MINUTE
COMMENT 'Remove `temptable` when its `status_s` column is equal to "DONE" in all rows.'
DO
BEGIN
IF EXISTS ( SELECT NULL
            FROM INFORMATOIN_SCHEMA.TABLES
            WHERE TABLE_SCHEMA = 'my_database'
              AND TABLE_NAME = 'temptable' ) THEN
    IF !( SELECT SUM(status_s != 'DONE')
          FROM my_database.temptable ) THEN
        DROP TABLE my_database.temptable;
    END iF;
END IF;
END;

此过程将首先检查表 temptable 是否存在。如果它存在,则该过程检查在 status_s 列中除 'DONE' 之外的具有非 NULL 值的行是否存在。如果不是,则该过程删除该表。

该过程每分钟执行一次。您可以调整它的执行频率。此外,在创建时,您可以使用 ALTER EVENT 启用或禁用它(例如,您可以在创建临时表后启用它,并在确保删除表后禁用它)。

不要忘记启用事件调度程序。

相关问题