1
Ошибка: UPDATE без WHERE
Без условия остаток уменьшится у всех товаров.
-- Опасно
UPDATE products SET stock_quantity = stock_quantity - 3;
-- Правильно
UPDATE products
SET stock_quantity = stock_quantity - 3
WHERE product_id = 1;
WHERE в UPDATE.NOT NULL у обязательного поля.INT для цены).Без условия остаток уменьшится у всех товаров.
-- Опасно
UPDATE products SET stock_quantity = stock_quantity - 3;
-- Правильно
UPDATE products
SET stock_quantity = stock_quantity - 3
WHERE product_id = 1;
Отрицательная цена или остаток вызовут ошибку.
-- Ошибка: price не проходит CHECK (price >= 0)
INSERT INTO products (product_name, price, stock_quantity)
VALUES ('Broken Item', -10.00, 5);
-- Ошибка: stock_quantity не проходит CHECK (stock_quantity >= 0)
INSERT INTO products (product_name, price, stock_quantity)
VALUES ('Missing Item', 10.00, -5);
product_name обязателен. Вставка без него вернёт ошибку.
-- Ошибка: product_name NOT NULL
INSERT INTO products (price, stock_quantity)
VALUES (100.00, 10);
Повторное создание View без замены вызовет ошибку.
-- Ошибка, если View уже есть
CREATE VIEW product_overview AS SELECT * FROM products;
-- Правильно
CREATE OR REPLACE VIEW product_overview AS
SELECT product_name, category, price * stock_quantity AS stock_value
FROM products;
Для денежных значений используйте DECIMAL, а не INT или FLOAT, чтобы избежать проблем с округлением.
-- Не рекомендуется
price INT
-- Рекомендуется
price DECIMAL(8, 2)