Как проверить, что данные не дублируются?

Manual QA Middle SQL / Базы данных обновлено 15.11.2025

Краткий ответ

Чтобы проверить, что данные не дублируются, нужно найти записи с одинаковыми значениями ключевых полей.
Для этого используют SQL-запрос с GROUP BY и HAVING COUNT(*) > 1.

Пример:
Проверяем, что нет повторяющихся e-mail в таблице users:

SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Если запрос ничего не вернул -> дубликатов нет.

Полный ответ

Что значит “данные дублируются”

Дубликаты — это строки, где ключевые поля совпадают (например, одинаковый e-mail, ID, номер договора и т.д.).
Дубликаты нарушают целостность данных и могут приводить к ошибкам в логике приложения.

Как проверить дубликаты с помощью SQL

Проверка по одному полю

SELECT email, COUNT(*) AS duplicates
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Результат: покажет e-mail, которые встречаются более 1 раза.

Проверка по нескольким полям

Если уникальность должна быть, например, по комбинации (first_name, last_name, birth_date):

SELECT first_name, last_name, birth_date, COUNT(*) AS cnt
FROM customers
GROUP BY first_name, last_name, birth_date
HAVING COUNT(*) > 1;

-> покажет группы клиентов, совпадающих по ФИО и дате рождения.

Проверка по ID (если он должен быть уникален)

SELECT id, COUNT(*)
FROM users
GROUP BY id
HAVING COUNT(*) > 1;

Если хоть одна строка вернулась -> нарушена уникальность первичного ключа.

Проверка на уровне QA / тестирования

Если тестировщик проверяет API или UI:

  • Выполнить запрос в БД с GROUP BY.

  • Или проверить через отчёт / экспорт CSV — отсортировать по нужному полю и убедиться, что значения не повторяются.

  • Или протестировать API: добавить 2 одинаковых пользователя -> ожидать ошибку (409 Conflict, Duplicate entry).

Пример API-проверки:

POST /api/users
{ "email": "test@mail.com" }

POST /api/users
{ "email": "test@mail.com" }

-> ожидаем ответ:
409 Conflict — User with this email already exists.

Проверка с использованием DISTINCT

Если хочешь просто сравнить количество уникальных и общих записей:

SELECT COUNT(*) AS total,
COUNT(DISTINCT email) AS unique_emails
FROM users;

Если total = unique_emails -> дубликатов нет.

Как предотвратить дубликаты

  • На уровне БД: добавить уникальный индекс (UNIQUE(email));

  • На уровне API: делать проверку перед вставкой (SELECT ... WHERE email = ...);

  • На уровне UI: валидация при вводе.

Итог

Проверить дубликаты можно с помощью:

  • GROUP BY ... HAVING COUNT(*) > 1 — увидеть повторяющиеся значения,

  • COUNT(DISTINCT) — проверить количество уникальных строк,

  • уникальных индексов — чтобы предотвратить дубли.

Если запрос не вернул строк — дубликатов нет.

Оцените ответ
0 / 5 · 0