На WinXP стоит Mysql 5.2.3.
Если сделать триггер для таблицы и послать отложеный запрос
REPLACE DELAYED INTO stat_oper VALUES(.... .....);
то после 3-ей вставки сервис Mysql просто отрубается, сервер становится недоступен и не дает переконектиться, и его надо заново стартовать.
Если же использовать:
REPLACE INTO stat_oper VALUES(.... .....);
а в триггере:
INSERT DELAYED IGNORE INTO stat_url VALUES (tr_id_url, NEW.url);
то после второй вставки:
mysql> REPLACE INTO stat_oper VALUES(1, 120, '20081001', 2, 'www.ru/23', 'ya.ru2', 111);
ERROR 1165 (HY000): INSERT DELAYED can't be used with table 'stat_url' because it is locked with LOCK TABLES
и больше ничего вставить нельзя.
Выходит что триггеры вообще нельзя использовать совместно с инструкцией DELAYED.
Так ли это? В чем моя ошибка?
Исходники:
CREATE TABLE `stat_oper` (
`id_sess` bigint(20) unsigned NOT NULL,
`id_pageview` bigint(20) unsigned NOT NULL,
`time_start` datetime DEFAULT NULL,
`duration` int(8) DEFAULT NULL,
`url` varchar(5000) DEFAULT NULL,
`ref` varchar(5000) DEFAULT NULL,
`ip` bigint(12) unsigned DEFAULT NULL,
PRIMARY KEY (`id_pageview`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TRIGGER `stat_oper_after_ins_tr` AFTER INSERT ON `stat_oper`
FOR EACH ROW
BEGIN
DECLARE tr_id_url, tr_id_ref, tr_id_page, tr_id_sess BIGINT UNSIGNED;
SET tr_id_url = NEW.id_pageview;
INSERT IGNORE INTO stat_url VALUES (tr_id_url, NEW.url);
SET tr_id_ref = NEW.id_pageview + 1;
INSERT IGNORE INTO stat_url VALUES (tr_id_ref, NEW.ref);
END;
CREATE TABLE `stat_url` (
`id` bigint(20) unsigned NOT NULL COMMENT 'ПК',
`url` varchar(5000) DEFAULT NULL COMMENT 'адрес страницы',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='InnoDB free: 52224 kB; InnoDB free: 48128 kB; InnoDB free: 7';