Обновить таблицу A, вставить в таблицу B одной командой SQL? - PullRequest
0 голосов
/ 14 сентября 2011

Я пытаюсь найти способ обновить таблицу A с помощью логического значения, а затем создать запись в таблице B (если логическое значение в таблице A имеет значение false) в том же операторе SQL в моей базе данных MySQL, возможно ли это??Или мне нужно создать два разных оператора?

Моя текущая логика выглядит следующим образом:

SELECT tbl_a.vendor_code, tbl_a.vendor_name, tbl_a.has_page 
FROM tbl_a 
WHERE tbl_a.vendor_code = 'myvendorcode'

Если приведенный выше запрос возвращает false на tbl_a.has_page, тогда я хочу обновить записьчтобы быть истинным

UPDATE tbl_a 
SET tbl_a.has_page = true 
WHERE tbl_a.vendor_code = 'myvendorcode'

, тогда я хочу создать новую запись в tbl_b с vendor_code и vendor_name, вставленными в соответствующие столбцы в моей новой записи.

Я использую ColdFusion и могу использовать <cftransaction>, чтобы поддерживать связь с БД, если я хочу использовать несколько операторов, но мне было интересно, есть ли способ сделать это в одном утверждении.

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

У вас есть два варианта:

  1. Несколько заявлений
  2. Trigger

Проблема с несколькими операторами состоит в том, что если вы запустите обновление или вставите из вне ваше приложение, то ваши бизнес-правила не будут соблюдены. Если вы вносите эти изменения с помощью триггера, то не имеет значения, исходят ли изменения из вашего приложения или если запрос выполняется непосредственно к базе данных, ваша бизнес-логика всегда будет выполняться.

3 голосов
/ 14 сентября 2011

Для этого вам понадобятся либо два оператора, либо триггер .

1 голос
/ 14 сентября 2011

Ответ RedFilter на триггер является лучшим, IMO.Один из вариантов: поддерживает ли ваша версия MySQL хранимые процедуры?Вы можете запустить один оператор (например, сохраненный процесс), который затем выполнит внутренние вызовы.Не идеально, но возможно.

...