Ответ
Для добавления ограничений используется команда ALTER TABLE. Основные типы ограничений и синтаксис:
- PRIMARY KEY:
ALTER TABLE employees ADD PRIMARY KEY (id); - FOREIGN KEY:
ALTER TABLE orders ADD CONSTRAINT fk_orders_customer_id FOREIGN KEY (customer_id) REFERENCES customers(id); - UNIQUE:
ALTER TABLE users ADD UNIQUE (email); -- Или с именем: ALTER TABLE users ADD CONSTRAINT uc_user_email UNIQUE (email); - CHECK:
ALTER TABLE products ADD CONSTRAINT chk_product_price CHECK (price > 0); - NOT NULL (модификация столбца):
ALTER TABLE employees ALTER COLUMN name SET NOT NULL; -- В MySQL: ALTER TABLE employees MODIFY name VARCHAR(100) NOT NULL;
Удаление ограничения:
ALTER TABLE table_name DROP CONSTRAINT constraint_name; Ответ 18+ 🔞
Э, слушай, про эти ваши таблицы в базе данных. Ну, там, где данные лежат, как на складе, только цифрами. Так вот, бывает, что склад надо переоборудовать, правила новые ввести. Для этого есть команда ALTER TABLE. С её помощью можно навесить на данные такие ограничения, что они аж пищать будут, но зато порядок будет, ёпта.
Смотри, какие бывают заморочки:
-
PRIMARY KEY (Главный ключ): Это как паспорт у человека, уникальный и неповторимый. Навешиваешь — и всё, этот столбец становится царем горы.
ALTER TABLE employees ADD PRIMARY KEY (id);Теперь у каждого работника свой
id, и два одинаковых — ни хуя себе, нельзя. -
FOREIGN KEY (Внешний ключ): Это когда ты говоришь одному столбцу: «Смотри, дружок, твои значения должны быть такими же, как у того парня в другой таблице, иначе я тебя в пиздюрину». Порядок ссылок, блядь.
ALTER TABLE orders ADD CONSTRAINT fk_orders_customer_id FOREIGN KEY (customer_id) REFERENCES customers(id);Теперь в заказах
customer_idможет быть только тот, кто реально есть в таблицеcustomers. Не придумаешь клиента из головы, хитрая жопа. -
UNIQUE (Уникальный): Не главный ключ, но тоже чтоб не повторялось. Например, почта. Двух васянов@пупкин.ру быть не должно, иначе пиздец в рассылке.
ALTER TABLE users ADD UNIQUE (email); -- А можно и с именем, чтоб потом не орать "какое там ограничение, блядь?" ALTER TABLE users ADD CONSTRAINT uc_user_email UNIQUE (email); -
CHECK (Проверка): Это вообще песня. Ты можешь сказать: «Цена, сука, должна быть больше нуля!». И база сама будет следить.
ALTER TABLE products ADD CONSTRAINT chk_product_price CHECK (price > 0);Попробуй запихнуть цену минус десять — получишь по ебалу от СУБД. Справедливо, внатуре.
-
NOT NULL (Не пустой): Это не отдельное ограничение, а модификация столбца. Говоришь: «Это поле, блядь, обязательно к заполнению!».
ALTER TABLE employees ALTER COLUMN name SET NOT NULL; -- В MySQL пишут по-другому, там своя атмосфера: -- ALTER TABLE employees MODIFY name VARCHAR(100) NOT NULL;Теперь без имени сотрудника не добавить. А то были у нас анонимусы, мудя.
А если накосячил и надо всё снести? Ну, бывает, перестарался с правилами. Тогда просто дропаешь эту хуйню по имени.
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
Главное — имя знать, а то будешь как Герасим из рассказа: «Мууу...», а удалить не сможешь, блядь. В рот меня чих-пых!