Кафедра ИТКафедра ИТ
Обучение
  • О кафедре
  • Направления подготовки
  • Друзья и партнеры
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
GitHub
Обучение
  • О кафедре
  • Направления подготовки
  • Друзья и партнеры
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
  • МДК.11.01 - BONUS. Проверка существования записей

МДК.11.01 - BONUS. Проверка существования записей

Как проверить, есть ли запись в таблице?

Иногда нужно понять, существует ли связь между данными в таблице. Например, в таблице заказов мы хотим проверить, делал ли покупатель уже заказ на определённый товар. Вот простой подход, который поможет это сделать.


Пример задачи

Таблица заказов:

order_idcustomer_idproduct_idquantity
111012
221021
311035
411013
531047

Вопросы:

  1. Покупал ли клиент с customer_id = 1 товар с product_id = 101? (Есть несколько записей)
  2. Покупал ли клиент с customer_id = 2 товар с product_id = 103? (Нет записей)
  3. Покупал ли клиент с customer_id = 3 товар с product_id = 104? (Есть одна запись)

Подход к решению

Мы считаем количество записей, соответствующих условиям. Вот запрос:

SELECT COUNT(*) AS record_count
FROM orders
WHERE customer_id = 1 AND product_id = 101;

Результаты:

  • record_count = 0 — клиент ещё не покупал этот товар.
  • record_count = 1 — клиент покупал этот товар один раз.
  • record_count > 1 — клиент покупал этот товар несколько раз.

Пример использования в процедуре

Автоматизируем проверку и добавление заказа:

DELIMITER //

CREATE PROCEDURE add_order(
    IN p_customer_id INT,
    IN p_product_id INT,
    IN p_quantity INT
)
BEGIN
    DECLARE record_count INT DEFAULT 0;

    -- Считаем количество подходящих записей
    SELECT COUNT(*) INTO record_count
    FROM orders
    WHERE customer_id = p_customer_id AND product_id = p_product_id;

    -- Проверяем результат
    IF record_count > 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Заказ уже существует';
    ELSE
        INSERT INTO orders (customer_id, product_id, quantity)
        VALUES (p_customer_id, p_product_id, p_quantity);
    END IF;
END //

DELIMITER ;

Тестовая база данных

Создадим таблицу и наполним её данными для проверки:

-- Создание базы данных
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;

-- Создание таблицы заказов
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL
);

-- Наполнение таблицы данными
INSERT INTO orders (customer_id, product_id, quantity) VALUES
(1, 101, 2),
(2, 102, 1),
(1, 103, 5),
(1, 101, 3),
(3, 104, 7);

Проверка

  1. Если записи несколько:
CALL add_order(1, 101, 2);
-- Выдаст ошибку: "Заказ уже существует"
  1. Если записи нет:
CALL add_order(2, 103, 1);
-- Успешно добавит новый заказ.
  1. Если запись одна:
CALL add_order(3, 104, 2);
-- Выдаст ошибку: "Заказ уже существует"

Этот подход помогает просто и надёжно проверить наличие данных и избежать дублирования записей. Вы можете использовать его как основу для множества задач, связанных с проверкой связей в таблицах.

Последнее обновление: 24.10.2025, 17:30
Предыдущая
МДК.11.01 - 22 - Представления
© Кафедра информационных технологий ЧУВО «ВШП», 2025. Версия: 0.20.1
Материалы доступны в соответствии с лицензией: