我打算在INSERT DELAYED
个表中执行大量MyISAM
。但这些表可能还不存在。比方说,例如每天都会有一张新表格。
因此,不是在我的客户端中检测缺少表并创建然后重试插入,这似乎是存储过程(“函数”)的一个好例子。
这可能吗,它会是什么样子? 这种方法有什么缺点吗?
答案 0 :(得分:1)
检查表是否存在似乎是浪费时间检查每个插入。如果你需要日复一日的表(在我看来,他们无视数据库中常见的大部分逻辑,所以我试着避免它们,我会):
另一种方法是MERGE表(参见http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html),每日cronjob创建'今日'表&使用alter table语句更新合并表的表列表。
答案 1 :(得分:1)
创建在午夜前每晚运行的预定事件并不是一个想法,并创建第二天的日志表。那样你总是可以依赖在任何INSERT
发生之前创建的表格?
CREATE EVENT createLogTable
ON SCHEDULE EVERY 1 DAY
STARTS '2010-6-20 23:59:00'
DO
BEGIN
SET @tablename = CONCAT('my_logging_table-',DATE(DATE_ADD(NOW(),INTERVAL 1 DAY)));
SET @query = CONCAT('CREATE TABLE IF NOT EXISTS`',@tablename,'` (`timestamp` INT,`event` VARCHAR( 20 )) ENGINE = MYISAM');
PREPARE createStatement FROM @query;
EXECUTE createStatement;
DEALLOCATE PREPARE createStatement;
END
答案 2 :(得分:0)
你可以制定一个好的方案来实现同样的目标。
例如,如果您有一个表“Logged_users”(每天都会创建),您只需将一列添加到users表中,或者使用 ID_USER,DAY 列创建一个额外的表(那将是一个更好的选择)。然后,您可以编写CRON作业以删除过去几天的每一行,并在每天凌晨12:00执行该作业。