Я работаю в phpMyAdmin 3.3.9 с mySQL 5.5.8.У меня есть база данных с таблицами myISAM, поэтому мне пришлось написать триггер для проверки ссылочной целостности между двумя полями таблицы.У меня есть таблица project_key
с первичным ключом, указанным в поле process ID
.Вторая таблица - hvi
, и она также содержит поле process ID
.process ID
s в таблице hvi
также должны быть в таблице project_key
.Поэтому я написал триггер для отображения ошибки, если это не так, который выглядит следующим образом:
create trigger t1
before insert
on hvi
for each row
begin
declare dummy int;
. . .
if new.`process id` not in(select `process id` from `project_key`) then
select `Process ID not in project_key`
into dummy
from hvi
where `KEY`= new.`KEY`;
end if;
end;
Если идентификатор процесса не равен нулю, это работает просто отлично.Когда он ловит process ID
, который пытается импортировать в hvi
, которого еще нет в таблице project_key
, отображается сообщение об ошибке «Неизвестный столбец« Идентификатор процесса отсутствует в ключе проекта »в« списке полей »», как будто этозакодирован для выполнения.
Проблема возникает, когда у меня нет process ID
для строки данных (что является обычным явлением).В моей записи данных будет пустое пространство, поэтому я хочу, чтобы триггер преобразовал это пустое пространство в нулевое значение и затем принял это нулевое значение.Я пытался закодировать это так, но это не сработало:
create trigger nullt1
before insert
on hvi
for each row
begin
declare dummy int;
if new.`Process ID` = ' ' then
set new.`Process ID` = null;
end if;
. . .
if new.`process id` not in(select `process id` from `project_key`) or null then
select `Process ID not in project_key`
into dummy
from hvi
where `KEY`= new.`KEY`;
end if;
end;
Я делал снимок в темноте с разрешением нулевой части, потому что я никогда раньше не пробовал ничего подобного (Я сделал преобразование пустых пространств в нулевые значения раньше, и это работает).Этот триггер в целом, очевидно, не работал, хотя, когда я пытался импортировать строку с пустым пространством, он все равно выдает мне ошибку «Неизвестный столбец« Идентификатор процесса отсутствует в ключе проекта »в« списке полей »».
Кто-нибудь знает, как я могу сделать эту работу?