Как обновить таблицу на основе предыдущих записей в MySQL - PullRequest
0 голосов
/ 31 марта 2010

У меня серьезные проблемы с использованием триггеров в MySQL. В основном я пытаюсь обновить строку on after insert. Я использую существующее значение в строке и пытаюсь обновить другой столбец той же строки.

Ex:

Existing_Name Actual_Name
Product_Arc1  Arc1
Product_Arc2  Arc2
Product_Arc3

Я беру значение Existing_Name, извлекаю вторую часть и обновляю Actual_Name с помощью триггеров. Но так как MySQL не поддерживает обновление той же таблицы, на которой был активирован триггер? Есть ли какой-нибудь возможный способ сделать то, что я хочу?

На данный момент я использую PHP-скрипт для выполнения того же эффекта. Но для этого требуется, чтобы конечный пользователь продолжал запускать этот сценарий из веб-браузера при любых изменениях в базе данных.

Любые идеи приветствуются.

Спасибо.

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Должен ли это быть триггер "один после вставки"? Это будет иметь место, если вам нужно значение auto_increment для вычисления значения поля, которое вы хотите изменить. В противном случае должен сработать триггер «перед вставкой». Вы можете изменить значения полей для вставки через SET NEW.fieldname = newvalue

например. давайте возьмем стол

CREATE TABLE foo (id int auto_increment, x int, y int, primary key(id))

и создать триггер перед вставкой

delimiter |

CREATE TRIGGER footrigger BEFORE INSERT ON foo
  FOR EACH ROW BEGIN
    IF NEW.y > NEW.x THEN
       SET NEW.y = -1;
    END IF;
  END;
|

А теперь давайте вставим две записи: одну, где y = x, и одну, где y> x

INSERT INTO foo (x,y) VALUES (1,1), (1,2)

A SELECT x,y FROM foo затем возвращает

"x";"y"
"1";"1"
"1";"-1"
0 голосов
/ 31 марта 2010

Не можете ли вы напрямую изменить механизм вставки? вставить в таблицу (Existing_Name, Actual_Name) значения ($ Existing_Name, заменить ($ Existing_Name, 'Product _', '') ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...