невозможно вставить в таблицу с помощью триггера mysql

#mysql

#mysql

Вопрос:

Я хочу создать триггер, который вставит идентификатор post и meta_value в другую таблицу (subscription_lookup) после новой вставки в таблицу wp_postmeta. Любой может сказать мне, какую часть я сделал неправильно, поскольку код не работает

  DELIMITER $

CREATE  TRIGGER `wp_postmeta_AFTER_INSERT` 
AFTER INSERT ON `wp_postmeta` 
FOR EACH ROW
 BEGIN
SET @order_id = ( SELECT new.post_id FROM wp_postmeta
where meta_key = '_paid_date');

 SET @paid_date = ( SELECT new.meta_value FROM wp_postmeta
where meta_key = '_paid_date' );

 INSERT INTO subscription_lookup (subscription_id, start_date)
  VALUES (@order_id,@paid_date);
END $
DELIMITER ;
 

Комментарии:

1. NEW.column_name уже сохраняется значение для строки, которая в данный момент обрабатывается триггером — вам не нужно ВЫБИРАТЬ.

2. Но без выбора я не мог использовать оператор where

3. Вы не можете выбрать NEW.column !!! NEW НЕ является таблицей. Предположим, что NEW.column это имя скалярной локальной переменной, а ее префикс ( NEW. ) показывает, что он хранит (уже хранит!) новое значение, которое присваивается (уже присвоено! триггер ПОСЛЕ) в столбец.

4. Большое вам спасибо, я новичок в SQL, но еще раз спасибо за объяснение.

Ответ №1:

Тест

 CREATE  TRIGGER `wp_postmeta_AFTER_INSERT` 
AFTER INSERT ON `wp_postmeta` 
FOR EACH ROW
INSERT INTO subscription_lookup (subscription_id, start_date)
    SELECT NEW.post_id, NEW.meta_value
    WHERE NEW.meta_key = '_paid_date';
 

Этот триггер проверяет, вставлена ли строка в wp_postmeta '_paid_date' свойство contains, и если true, то он вставляет значения, вставленные в таблицу ведения журнала, иначе ни одно из них не вставляется.