2016-02-17 5 views
0

У меня есть таблица со списком контактов моего мобильного телефона, это структура Контакты стол.MySQL Trigger After Insert Value на другой таблице

enter image description here

И другая является smartteleco стол.

enter image description here

ContactId из smartteleco таблицы FOREIGN KEY к ContactId из контактов.

Я создаю триггер, если я ВСТАВИТЬ значение в контакты таблицы и значение ContactNumber1 начинается с 0918,0919,0920,0921 он будет храниться в CellNumber поле от smartteleco таблица.

Это триггеры, которые я уже пробовал, но есть синтаксическая ошибка, и ошибка всегда находится внутри IF ЗАЯВЛЕНИЕ.

CREATE TRIGGER addSmart 
    AFTER INSERT ON contacts 
     FOR EACH ROW 
     BEGIN 
      IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1) 
       SET CellNumber = substring(ContactNumber1,1,11); 
      END IF; 
     END 



CREATE TRIGGER addSmart 
    AFTER INSERT ON contacts 
     FOR EACH ROW 
     BEGIN 
      IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1) 
       INSERT INTO smartteleco (CellNumber) VALUES (ContactNumber1); 
      END IF; 
     END 



CREATE TRIGGER addSmart 
     AFTER INSERT ON contacts 
      FOR EACH ROW 
      BEGIN 
       IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1) 
        INSERT INTO smartteleco (NEW.CellNumber) VALUES (NEW.ContactNumber1); 
       END IF; 
      END 


CREATE TRIGGER addSmart 
    AFTER INSERT ON contacts 
     FOR EACH ROW 
     BEGIN 
      IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1) 
       SET CellNumber = ContactNumber1; 
      END IF; 
     END 



    CREATE TRIGGER addSmart 
    AFTER INSERT ON contacts 
     FOR EACH ROW 
     BEGIN 
      IF(substring(ContactNumber1,1,4) IN (0918,0919,0920,0921) = 1) 
       SET NEW.CellNumber = NEW.ContactNumber1; 
      END IF; 
     END 
+0

Пожалуйста отправьте сообщение об ошибке, –

ответ

0

Триггер строки не может напрямую обращаться к столбцам таблицы, к которой он прикреплен. Это может получить доступ к значениям во вновь вставленной записи, используя псевдо-запись NEW. Чтобы ваши триггеры работали, просто замените ссылки на ContactNumber1 со ссылками на NEW.ContactNumber1.

Кроме того, необходимо использовать правильный синтаксис для IF структур, что

IF <contition> THEN --< You need this keyword 
    <statement> 
END IF; 

Вы также, возможно, придется бросить ContactNumber1 в CHAR использовать substring() на нем.

Так правильный синтаксис триггер должен быть

CREATE TRIGGER addSmart 
    AFTER INSERT ON contacts 
    FOR EACH ROW 
BEGIN 
    IF(substring(CAST(NEW.ContactNumber1 AS CHAR(11)), 1, 4) IN ('0918', '0919', '0920' ,'0921')) 
    THEN 
    INSERT INTO smartteleco (ContactId, CellNumber) 
     VALUES (NEW.ContactId, NEW.ContactNumber1); 
    END IF; 
END 

EDIT: Синтаксис исправлен. Я также обнаружил, что вам нужно будет изменить столбец ContactNumber1 от INT(11) до CHAR(11), что на самом деле является предпочтительным типом данных, так как вы никогда не будете выполнять арифметику по номеру телефона.

+0

Спасибо за информацию, но есть ошибка. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' по строке 7 – ZeroCool

+0

Да, конечно же есть! –

0

Попробуйте это:

BEGIN 
     IF SUBSTRING(NEW.ContactNumber1,1,4) IN ('0918','0919','0920','0921') THEN 
      INSERT INTO smartteleco (CellNumber) VALUES (NEW.ContactNumber1); 
     END IF; 
    END 
+0

Это не работает. У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с подстрокой WHERE (NEW.ContactNumber1,1,4) IN ('0918', '0919', '0920', '0921') 'по строке 6 – ZeroCool

+0

Я отредактировал ответ, извините. –

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