2016-11-21 2 views
-3

У меня есть таблица MySQL под названием рейсы, которая включает поля, называемые происхождения и назначением которые являются кодами аэропортов, указанных в таблице аэропортов и которые я определил, как CHAR (3). Я хочу иметь возможность вставлять записи, где по очевидным причинам значения в столбцах происхождения и отправления не могут быть одинаковыми. Как это сделать с помощью инструкции SQL INSERT INTO TABLE?Обеспечение неравенства строк в MySQL

+0

Добавить уникальный указатель в оба столбца – Mihai

+1

@Mihai Это не помешает перелету с 'ABC' на' ABC' в БД. Валидация для этого должна выполняться на уровне приложения. – ceejayoz

+0

, так что если бы мне пришлось выполнить это в php, я бы предположил, что мне придется использовать встроенную функцию, которая сравнивает две строки ввода? – Jockfaire

ответ

0

Единственный способ сделать это в MySQL - использовать триггер.

Другие базы данных поддерживают ограничение check, где вы можете указать check (origin <> destination). MySQL принимает этот синтаксис, но, к сожалению, не применяет ограничение.

Вы также можете сделать это на уровне приложения.

+0

Я думал, что мог бы выполнить это в БД, а не в приложении. – Jockfaire

+0

, так что я полагаю, что то же самое справедливо для сравнения времени с использованием типа данных TIME ?? – Jockfaire

+0

@Jockfaire. , , Ограничения 'check' не выполняются, независимо от типа столбцов в таблице. –

0

Создать триггер:

CREATE TRIGGER `travels_before_insert` BEFORE INSERT ON `travels` FOR EACH ROW BEGIN 
DECLARE msg VARCHAR(255); 
    IF NEW.source=NEW.destination THEN 
     set msg = "Error: You can't have same source and destination"; 
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; 
    END IF; 
END; 

Что она делает это предотвратить вставку из встречающихся если источник и назначения совпадает.

+0

Спасибо за ваш ответ. Я дам этот триггер (при условии, что phpMyAdmin позволит мне) и сообщит о моих выводах. – Jockfaire

Смежные вопросы