Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 42 из 52 · 10 мин
PRIMARY KEY, NOT NULL, UNIQUE, CHECK и DEFAULT: правила, которые база не даст нарушить.
А если менеджер опечатается и введёт скидку 500%?
Запиши правило в таблицу — CHECK (discount BETWEEN 1 AND 50). Тогда я просто не пущу такую строку, кто бы её ни вставлял.
Проверки в приложении можно обойти. Ограничения в базе — нет.
PRIMARY KEYCREATE TABLE promo (code text PRIMARY KEY);
INSERT INTO promo VALUES ('AUTUMN');
SELECT * FROM promo;NOT NULLSELECT column_name, is_nullable
FROM information_schema.columns
WHERE table_name = 'products'
ORDER BY ordinal_position;UNIQUESELECT name, email FROM customers WHERE email IS NULL;CHECKCHECK (условие) — строка, для которой условие ложно, не будет вставлена или изменена.SELECT conname, pg_get_constraintdef(oid) AS rule
FROM pg_constraint
WHERE conrelid = 'reviews'::regclass AND contype = 'c';CONSTRAINTCONSTRAINT имя CHECK (…) — дать ограничению понятное имя. Оно появится в тексте ошибки.CREATE TABLE promo_test (
discount integer CONSTRAINT discount_range CHECK (discount BETWEEN 1 AND 50)
);
SELECT conname FROM pg_constraint WHERE conrelid = 'promo_test'::regclass;столбец тип DEFAULT значение — подставляется, если при вставке столбец не указан.is_active DEFAULT true, created_at DEFAULT now().SELECT column_name, column_default
FROM information_schema.columns
WHERE table_name = 'products' AND column_default IS NOT NULL;Всё, что обязано быть правдой всегда, записывай ограничением в таблицу, а не только проверкой в коде.
Создай таблицу promo_codes: code — text, первичный ключ; discount — integer, обязательный, с CHECK от 1 до 50; is_active — boolean, обязательный, по умолчанию true.
discount обязателен — пока нетis_active обязателен и по умолчанию true — пока нетcategories — категории товаровid, nameproducts — товарыid, name, category_id, price, weight_g, is_available, added_oncustomers — покупателиid, name, email, city, phone, birthday, registered_onstaff — сотрудникиid, name, role, salary, hired_on, manager_idorders — заказыid, customer_id, staff_id, created_at, statusorder_items — позиции заказовorder_id, product_id, quantity, unit_pricereviews — отзывыid, customer_id, product_id, rating, comment, created_onВыберите один ответ.
Можно ли в UNIQUE-столбце две строки с NULL?
Выберите все подходящие варианты.
Что включает PRIMARY KEY?
Проверяем состояние обучения…