DDL / СхемаНачальный
PRIMARY KEY
Уникальный идентификатор строки. Автоматически создаёт уникальный индекс, не допускает NULL.
Синтаксис
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY -- или PRIMARY KEY (col1, col2) -- составной
Объяснение
PRIMARY KEY = UNIQUE + NOT NULL + автоматический индекс. На таблицу — только один.
Рекомендации для PostgreSQL:
- BIGINT GENERATED ALWAYS AS IDENTITY — современный стандарт
- UUID — если нужна глобальная уникальность, но медленнее из-за случайности (UUID v7 лучше)
- Суррогатный ключ (id) лучше натурального (email) — email может измениться
Пример
-- Современный вариант CREATE TABLE products ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name TEXT NOT NULL ); -- Составной ПК CREATE TABLE order_items ( order_id BIGINT REFERENCES orders(id), product_id BIGINT REFERENCES products(id), PRIMARY KEY (order_id, product_id) );
Связанные термины
Анекдоты по теме
— Можно ли использовать CTE для UPDATE? — Да: WITH to_update AS ( SELECT id FROM orders WHERE status = 'pending' AND created_at < NOW() - INTERVAL '7 days' ) UPDATE orders SET status = 'expired' WHERE id IN (SELECT id FROM to_update); — Читаемо! — И безопасно — сначала видишь что будет обновлено.
SQL написан в 1974 году. SQL до сих пор используется везде. SQL пережил dBase, FoxPro, объектные базы, XML-базы, NoSQL-революцию. SQL смотрит на новые технологии: — Я подожду.
Начинающий: — А что будет, если написать UPDATE users SET зарплата = зарплата * 2? Опытный: — Все станут богатыми. Начинающий: — А если без WHERE? Опытный: — Я сказал — все.