Справка по транзакциям MySQL - PullRequest
       38

Справка по транзакциям MySQL

0 голосов
/ 26 октября 2009

Эта проблема ставит меня в тупик:

BEGIN;
INSERT INTO sub_users(user_id, email) 
SELECT user_id FROM users WHERE email='someemail@email.com', '$email';
COMMIT;

Обычно в этих транзакциях у меня несколько утверждений, но я удалил их для ясности.

Я получаю эту ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ' 'test@email.com'' at line 1

Я использую MySQL версии 5.1.36

Ответы [ 2 ]

2 голосов
/ 26 октября 2009

У меня есть как минимум две ошибки, которые я вижу:

  1. Вы пытаетесь вставить два столбца данных (user_id и email), но выбираете только один столбец (user_id) из второй половины INSERT INTO ... SELECT. Вы должны выбрать то же количество столбцов, которое вы пытаетесь вставить, и порядок имеет значение.
  2. У вас есть синтаксическая ошибка в предикате вашего SELECT. Я думаю, что вы хотите использовать:

    WHERE email IN ('email1@foo.com', 'email2@bar.com')

или его эквивалент:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
2 голосов
/ 26 октября 2009

Две проблемы с вашим утверждением:

  1. Вы не выбираете адрес электронной почты для вставки (только идентификатор)
  2. Вы используете '=' вместо IN предложения.

Должно быть что-то вроде:

INSERT INTO sub_users(user_id, email)
 SELECT user_id, email FROM users
  WHERE email IN ('someemail@email.com', 'test@email.com');

вместо.

Обновление (на основе комментария)

INSERT INTO sub_users(user_id, email)
 SELECT user_id, 'test@email.com' FROM users
  WHERE email = 'someemail@email.com';
...