2015-06-06 4 views
0

Почему в MYSQL, выполнив этот SQL-запрос, 2 строки добавят в таблицу? Выполняется ли этот запрос два раза!?;Вставить лишнюю строку в таблицу

INSERT INTO user(`usr_name`, `email`, `name`, `reg_date`, `role_id`) 
(
SELECT "editor1", 
     "[email protected]", 
     "editor1", 
     "2005-12-20", 
     2 
FROM `user` 
WHERE (("admin", 3) IN (
     SELECT usr_name, role_id 
     FROM `user` 
    ) 
    AND NOT EXISTS (
     SELECT usr_name, email 
     FROM `user` 
     WHERE usr_name = "editor1" OR email = "[email protected]" 
    )) 
) 

результат is here!

+0

Возможно, оператор 'select' возвращает два результата? Если бы вы могли объяснить немного больше об этом утверждении, например. чего вы хотите достичь и т. д., вам было бы легче помочь вам. – d4Rk

ответ

1

По-видимому, две строки в user соответствуют WHERE условиям.

Вы не используете таблицу user в первом FROM. Так как об этом вместо:

INSERT INTO user(`usr_name`, `email`, `name`, `reg_date`, `role_id`) 
    SELECT t.* 
    FROM (SELECT 'editor1' as user_name, '[email protected] as email, 
       'editor1' as name, '2005-12-20 as reg_date, 2 as role_id 
     ) t 
    WHERE ('admin', 3) IN (SELECT usr_name, role_id 
          FROM `user` 
         ) AND 
      NOT EXISTS (SELECT usr_name, email 
         FROM `user` u 
         WHERE u.usr_name = t.usr_name OR u.email = t.email 
        ) 

Или, еще лучше, но уникальные индексы на полях, которые вы не хотите, продублированные в таблице:

create unique index idx_user_username on user(usr_name); 
create unique index idx_user_email on usr(email); 

Пусть база данных защищает таблицу. Он поможет вам.

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