|
|
|
| Есть большая таблица (ок. 200 тыс. записей). В результате ошибок сервера были удалены некоторые записи. В таблице есть первичный ключ (id) с автоинкрементом. Можно ли каким-нибудь образом узнать id удаленных записей? | |
|
|
|
|
|
|
|
для: svs1608
(29.01.2007 в 19:08)
| | Сейчас что-нибудь придумаем? Версия MySQL выше 4.1, т.е. можно использовать вложенные запросы? | |
|
|
|
|
|
|
|
для: svs1608
(29.01.2007 в 19:08)
| | Хотя наверное ничего лучше чем извлечь номера существующих записей в PHP-скрпт и проверить скрипт отсутствующие элементы не придумаешь... | |
|
|
|
|
|
|
|
для: cheops
(29.01.2007 в 21:24)
| | да, mysql 5-й версии.. лучше все-таки обойтись без пхп.. | |
|
|
|
|
|
|
|
для: svs1608
(30.01.2007 в 01:21)
| | Диапазоны непрерывности, вероятно, можно определить следующим запросом
SELECT a.id, b.id
FROM tab AS a
OUTER JOIN tab AS b ON a.id=b.id-1
WHERE a.id IS NULL OR b.id IS NULL
|
Если только сервер его схавает.
А с другой стороны, почему бы ему его не схвавать? | |
|
|
|
|
|
|
|
для: svs1608
(29.01.2007 в 19:08)
| | Вот чего ещё в дополнение к Trianon придумал, можно создать хранимую процедуру
CREATE PROCEDURE empty_value (OUT result TEXT)
LANGUAGE SQL
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE x INT DEFAULT 0;
SET result = "";
WHILE i < 200000 DO
SET x = NULL;
SELECT i INTO x FROM DUAL WHERE i IN (SELECT id FROM tbl);
IF(x IS NULL) THEN
SET result = CONCAT(result," ",i);
END IF;
SET i = i + 1;
END WHILE;
END
|
и вызывать её следующи образом
CALL empty_value(@result);
SELECT @result;
|
Оно конечно может и не быстро выйдет, но зато без PHP и готово к использованию :))) | |
|
|
|