Вопрос по sql, mysql – Получить идентификатор строки, когда уникальный ключ нарушается

1

У меня есть столuser, Имеет столбцыid а такжеemail.

USER TABLE

id | email
1  | [email protected]
2  | [email protected]

id этоPRIMARY KEY AUTO_INCREMENT иemail являетсяUNIQUE KEY. When I insert a new row in the table and there is a DUPLICATE KEY Исключение Я хочу получитьid на которомDUPLICATE KEY исключение было брошено.

Прямо сейчас я делаю это -

BEGIN
DECLARE EXIT HANDLER FOR 1062
    BEGIN
        SELECT id
        INTO id
        FROM user
        WHERE email = '[email protected]';
    END;
    INSERT INTO user
    (email)
    VALUES
    ('[email protected]');

SELECT LAST_INSERT_ID() INTO id;
END;

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

Ваш Ответ

2   ответа
0

использованиеINSERT ... ON DUPLICATE KEY UPDATE, затемполучить автоинкрементный идентификатор как обычно:

If a table contains an AUTO_INCREMENT column and INSERT ... ON DUPLICATE KEY UPDATE inserts or updates a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. Exception: For updates, LAST_INSERT_ID() is not meaningful prior to MySQL 5.1.12. However, you can work around this by using LAST_INSERT_ID(expr). Suppose that id is the AUTO_INCREMENT column. To make LAST_INSERT_ID() meaningful for updates, insert rows as follows:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededAuto_incrementError: User Rate Limit Exceededstackoverflow.com/questions/12692003/…
Error: User Rate Limit ExceededINSERT ... ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)Error: User Rate Limit ExceededLAST_INSERT_ID()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceedednothing will be changedError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded JHS
1

При сканированииUNIQUE KEY BTREE используется, так что это довольно быстро.

Не хотите ли вы самостоятельно проверять наличие ценности вselect запрос

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded JHS

Похожие вопросы