MySQL вставляет новое значение, когда нет других подобных - PullRequest
2 голосов
/ 30 марта 2019

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

IF EXIST (SELECT email FROM users WHERE email = "email")  
THEN 
    BEGIN 
        'We Have Records of this Customer' 
    END                                          
ELSE 
    BEGIN 
        INSERT INTO users 
        VALUES (null,'email9','password9','forename9','lastname9')
    END
END IF

Или:

IF SELECT COUNT(*) FROM users WHERE email = 'email' > 0
THEN 
    BEGIN
    //email exist
    END
ELSE 
    BEGIN
    //inserting
    END
END IF

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Это похоже на хороший вариант использования для синтаксиса MySQL INSERT ... ON DUPLICATE KEY UPDATE.

Прежде всего, вы хотите создать ограничение UNIQUE для столбца email. Это правильный способ представить ваше бизнес-правило:

ALTER TABLE users ADD CONSTRAINT users_unique_email UNIQUE (email);

Теперь, если запись, которая собирается быть вставленной, сгенерирует дубликат на первичном ключе или на этом ограничении UNIQUE, тогда MySQL позволяет вместо этого превратить операцию в UPDATE.

В вашем случае, поскольку вы не хотите ничего обновлять в этом случае, вы можете просто переназначить столбец email (который, как мы знаем, здесь тот же).

Рассмотрим:

INSERT INTO users 
    VALUES (null,'email9','password9','forename9','lastname9')
    ON DUPLICATE KEY UPDATE SET email = 'mail9';
0 голосов
/ 30 марта 2019

Я не могу комментировать, но я публикую это.Я рекомендую сделать внешний сценарий, такой как в python или java, чтобы сделать это для вас, выбрав * и проанализировав вывод, потому что сам SQL не имеет возможности сделать это.

...