我正在编写 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")
答案 0 :(得分:0)
创建事件过程:
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 启用或禁用它(例如,您可以在创建临时表后启用它,并在确保删除表后禁用它)。
不要忘记启用事件调度程序。