根据WHERE子句中变量中的值更新记录

时间:2019-02-07 13:18:46

标签: mysql sql

我正试图执行此查询并得到错误代码:1175使用正在使用安全模式,并且您尝试更新没有where子句的表。

这是查询

set @email = 'foo@bar.com';
UPDATE user SET date_of_birth = '1985-10-01' 
WHERE email_id = @email;

我不想禁用安全模式。

1 个答案:

答案 0 :(得分:1)

由于您不想在MySQL Workbench中禁用安全模式,因此您可能需要调整查询,以便可以在where子句中使用主键。

set @email = 'foo@bar.com';
set @id =
(
    SELECT u.id
    FROM user u
    WHERE u.email_id = @email
);

UPDATE user SET date_of_birth = '1985-10-01' 
WHERE id = @id;

或直接:

SET @id = 42;

UPDATE user SET date_of_birth = '1985-10-01' 
WHERE id = @id;

或者,暂时禁用安全模式(这是我要选择的选项):

set @email = 'foo@bar.com';

SET SQL_SAFE_UPDATES = 0;

UPDATE user SET date_of_birth = '1985-10-01' 
WHERE email_id = @email;

SET SQL_SAFE_UPDATES = 1;