Ответ
SQL-ограничения (constraints) — это правила, применяемые к столбцам или таблицам для обеспечения целостности и точности данных. Они предотвращают вставку некорректных данных на уровне базы данных.
Основные типы ограничений:
-
NOT NULL— запрещает столбцу содержать значенияNULL.CREATE TABLE users ( id INT NOT NULL, username VARCHAR(50) NOT NULL ); -
UNIQUE— гарантирует, что все значения в столбце (или комбинации столбцов) различны.CREATE TABLE users ( email VARCHAR(100) UNIQUE ); -- Или для нескольких столбцов: ALTER TABLE users ADD CONSTRAINT uc_name UNIQUE (first_name, last_name); -
PRIMARY KEY— комбинацияNOT NULLиUNIQUE. Однозначно идентифицирует каждую строку в таблице.CREATE TABLE orders ( order_id INT PRIMARY KEY ); -
FOREIGN KEY— обеспечивает ссылочную целостность. Связывает столбец сPRIMARY KEYдругой таблицы.CREATE TABLE orders ( user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ); -
CHECK— проверяет, что значения в столбце удовлетворяют заданному условию.CREATE TABLE products ( price DECIMAL(10,2) CHECK (price > 0), quantity INT CHECK (quantity >= 0) ); -
DEFAULT— задает значение по умолчанию для столбца при вставке новой строки, если значение не указано.CREATE TABLE logs ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status VARCHAR(20) DEFAULT 'PENDING' );
Практическое применение: Ограничения можно задавать при создании таблицы (CREATE TABLE) или добавить/изменить позже с помощью ALTER TABLE. Их использование критически важно для предотвращения "мусорных" данных, но может незначительно влиять на производительность операций INSERT/UPDATE из-за дополнительных проверок.
Ответ 18+ 🔞
А, SQL-ограничения, блядь! Это ж как строгий охранник на входе в клуб, который не пускает всяких распиздяев с фальшивыми данными. Слушай, если ты не поставишь эти правила, твоя база превратится в помойку, внатуре.
Вот смотри, основные типы этих заслонов, которые не дают всякой хуйне просочиться.
-
NOT NULL— это как сказать столбцу: «Мужик, ты обязан быть, нихуя пустым не останешься!». Нельзя воткнутьNULL, и всё тут.CREATE TABLE users ( id INT NOT NULL, username VARCHAR(50) NOT NULL ); -
UNIQUE— гарантирует, что все значения в столбце — уникальные пидоры. Два одинаковых — уже пиздец, ошибка.CREATE TABLE users ( email VARCHAR(100) UNIQUE ); -- А если на пару столбцов — то это уже групповуха уникальности, блядь: ALTER TABLE users ADD CONSTRAINT uc_name UNIQUE (first_name, last_name); -
PRIMARY KEY— это, ёпта, главный пахан таблицы. Комбо изNOT NULLиUNIQUE. Каждая строка им клеймится, как зек.CREATE TABLE orders ( order_id INT PRIMARY KEY ); -
FOREIGN KEY— а это уже связи налаживает, семейные узы, блядь. Столбец тычет пальцем вPRIMARY KEYдругой таблицы и говорит: «Я от этого пацана, пустите».CREATE TABLE orders ( user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ); -
CHECK— самый дотошный, ёбаный проверяльщик. Стоит с условием и не пускает, если что не так. «Цена больше нуля? Не-а, иди нахуй».CREATE TABLE products ( price DECIMAL(10,2) CHECK (price > 0), quantity INT CHECK (quantity >= 0) ); -
DEFAULT— ленивый, но добрый. Если ты забыл указать значение, он подсовывает своё, заранее заготовленное. «Не пались, братан, я тебя прикрою».CREATE TABLE logs ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status VARCHAR(20) DEFAULT 'PENDING' );
Как этим пользоваться на практике: Можно всё это впилить сразу при рождении таблицы (CREATE TABLE), а можно и потом прикрутить, через ALTER TABLE. Без них — анархия и бардак, но знай, чувак: каждая дополнительная проверка — это микро-тормоз при вставке или обновлении. За порядок, блядь, всегда надо платить.