Нет, это невозможно, потому что вы не имеете здесь дело с типами .
Вы пытаетесь сделать утверждения о содержании отдельных строк, поэтому вы делаете утверждения о экземплярах . Это не то, что подсказка типа может решить для вас.
Это - Функция (хотя не, что я ожидал, любой).
Этот поток предлагает делать Ваш ключ Первичным ключом для получения поведения, которое Вы ожидали:
Это - функция - Нулевое значение является неопределенным значением, поэтому два Нулевых значения не являются тем же. Может немного сбивать с толку, но имеет смысл, когда Вы думаете об этом.
Уникальный индекс действительно гарантирует, что ненулевые значения уникальны; Вы могли указать, что Ваш столбец не принимает Нулевые значения.
Единственным путем я могу думать об обработке, это без дополнительных триггеров/программирования должно было бы иметь сингл "Ни одно из вышеупомянутого" значения в каждой из таблиц, на которые ссылаются, так, чтобы Ваш тест был похож
INSERT INTO test VALUES (1, NO_LOCATION, NO_WORKGROUP, NO_PROGRAM),
(1, NO_LOCATION, NO_WORKGROUP, NO_PROGRAM)
Где NO_*
идентификаторы являются правильным типом/длиной для Ваших столбцов ID. Это затем перестало бы работать, поскольку Вы будете ожидать это.
В MySQL NULL! = ПУСТОЙ УКАЗАТЕЛЬ или что-либо. Таким образом, именно это не работает УНИКАЛЬНОЕ. Необходимо использовать другое значение по умолчанию для пробелов, как нуль
Я думаю, что важно отметить, что существует надлежащий путь к Нулевым значениям, которые будут интерпретированы и обработаны, и поведение, показанное OP, точно, что предназначается. Можно игнорировать то поведение, и можно обработать запрос любым путем, Вы хотите без возражения от меня, но это могло бы быть хорошо для "Принятия" ответа, который описывает некоторую форму Лучших практик, а не нестандартное персональное предпочтение.
Или если Вы не соглашаетесь с Лучшей практикой согласия, Вы не можете просто Принять ответ.
Это не гонка для принятия ответа как можно быстрее. Обдумывание и сотрудничество также предназначаются, чтобы быть частью процесса, я думаю.