Есть ли способ определить, имеет ли таблица, возможно, очень большая таблица, смежные / последовательные идентификаторы первичного ключа с автоматическим увеличением? Есть ли способ определить это с помощью SQL-запроса? Предположим, кто-то случайно удаляет несколько строк из очень большой таблицы. Мне нужно знать, что это произошло.
e.g.
table XYZ
id
1
2
3
4
table abc
1
2
4 <--- non contiguous, skipped 3
5
Интересно узнать о целостности данных. Я хочу использовать методологию SQL-запросов, чтобы упростить задачу и не писать скрипт PHP для работы с базой данных.
3 ответа
Вы можете сравнить эти два значения:
SELECT (MAX(ID) - MIN(ID)) + 1, -- e.g. ID 2 - ID 1 = 1 (+1) = 2 rows
COUNT(ID)
FROM Table
Если таблица по-прежнему непрерывна, они останутся такими же.
Как насчет этого: подсчитайте количество строк, вычтите наименьший идентификатор из наибольшего, и если два числа совпадают, тогда идентификаторы смежны.
Используйте самостоятельное соединение
SELECT *
FROM t t1
LEFT JOIN t t2 ON t2.ID = t1.ID + 1
WHERE t2.ID IS NULL
Если пробелов нет, будет возвращена только одна строка для последнего элемента в таблице. Вы можете даже исключить эту строку из набора результатов, если хотите проявить смекалку, но это должно дать вам представление.
Этот метод особенно полезен, если вы хотите больше работать с промежутками. В противном случае предлагаемые методы подсчета проще.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.