powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальность по нескольким полям если одно из полей имеет определённое значение
6 сообщений из 6, страница 1 из 1
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39628425
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно реализовать такое ограничение на вставку, триггером или как-то ещё, чтобы записи были уникальны по полям department_id, employee_id, employee_type, но только в случае если employee_type = 'manager'.


То есть, некий синтез констрейнтов UNIQUE и CHECK, где UNIQUE проверялся бы только при выполнении условия в CHECK.
...
Рейтинг: 0 / 0
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39628442
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер с проверкой, при невыполнении условия - SIGNAL SQLSTATE '23000', MYSQL_ERRNO = 10625
...
Рейтинг: 0 / 0
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39628443
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, 1062 конечно.
...
Рейтинг: 0 / 0
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39629098
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что делаю не так? Пробую два варианта.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER `before_insert_department_employee`
BEFORE INSERT ON `department_employee`
BEGIN
	IF new.employee_type = 'manager' AND EXISTS 
		(SELECT 'x' INTO count_managers FROM `department_employee` WHERE `department_id` = new.department_id AND `employee_id` = new.employee_id AND `employee_type` = new.employee_type)
		THEN
			SIGNAL SQLSTATE '23000'
			SET MESSAGE_TEXT = 'Trying to add duplicate manager';
	END IF;
END;



Ответ:
авторSQL запрос:

CREATE TRIGGER `before_insert_department_employee`
BEFORE INSERT ON `department_employee`
BEGIN
IF new.employee_type = 'manager' AND EXISTS
(SELECT 'x' INTO count_managers FROM `department_employee` WHERE `department_id` = new.department_id AND `employee_id` = new.employee_id AND `employee_type` = new.employee_type)
THEN
SIGNAL SQLSTATE '23000'
SET MESSAGE_TEXT = 'Trying to add duplicate manager'
Ответ MySQL: Документация

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'BEGIN
IF new.employee_type = 'manager' AND EXISTS
(SELECT 'x' INTO count_co' на строке 3



Второй вариант.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER `before_insert_department_employee` 
BEFORE INSERT ON `department_employee`
BEGIN
	DECLARE count_managers int default 0;
	SELECT COUNT(*) INTO count_managers FROM `department_employee` WHERE `department_id` = new.department_id AND `employee_id` = new.employee_id AND `employee_type` = 'manager' AND `employee_type` = new.employee_type;
	IF count_managers > 0 THEN
		SIGNAL SQLSTATE '23000'
		SET MESSAGE_TEXT = 'Trying to add duplicate manager';
	END IF;
END;




авторSQL запрос:

CREATE TRIGGER `before_insert_department_employee`
BEFORE INSERT ON `department_employee`
BEGIN
DECLARE count_managers int default 0
Ответ MySQL: Документация

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'BEGIN
DECLARE count_managers int default 0' на строке 3
...
Рейтинг: 0 / 0
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39629122
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM DELIMITER
...
Рейтинг: 0 / 0
Уникальность по нескольким полям если одно из полей имеет определённое значение
    #39629246
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вон оно что!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальность по нескольким полям если одно из полей имеет определённое значение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]