我试图更新访问的列,使其值为1。我使用MySQL工作台,我从工作台内部在SQL编辑器中编写语句。我正在写下面的命令:

UPDATE tablename SET columnname=1;

它给了我以下错误:

您正在使用安全更新模式,并且试图在没有 若要禁用安全模式,请切换该选项 ....

我按照说明,我从编辑菜单中取消了安全更新选项,然后是首选项,然后是SQL编辑器。同样的错误仍然出现&我无法更新此值。求你了,告诉我怎么了?


当前回答

您可以通过以下命令启用和禁用安全更新选项。

禁用,

SET SQL_SAFE_UPDATES=0;

or

SET SQL_SAFE_UPDATES=OFF;

要启用,

SET SQL_SAFE_UPDATES=1;

or

SET SQL_SAFE_UPDATES=ON;

其他回答

如果处于安全模式,则需要在where子句中提供id。所以像这样的东西应该可以工作!

UPDATE tablename SET columnname=1 where id>0

只需输入SET SQL_SAFE_UPDATES = 0;在删除或更新之前,重新设置为1 设置sql_safe_updates = 1

正如在以前的文章中所述,更改数据库服务器的默认设置将导致对已发布项目中的数据进行不正确的查询,从而导致对现有数据的不希望的修改。因此,要实现前面文章中所述的命令,有必要在测试环境中对示例数据运行它们,然后在正确测试后执行它们。

我的建议是写一个WHERE条件语句,如果更新应该对表中的所有行都有效,它将循环遍历所有条件下的所有行。例如,如果表中包含一个ID值,则条件ID > 0可以用于选择所有行:

/**
 * For successful result, "id" column must be "Not Null (NN)" and defined in
 * INT data type. In addition, the "id" column in the table must have PK, UQ
 * and AI attributes.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE id > 0;

如果表中不包含id列,更新操作可以通过检查一个不能为空的列在所有行上运行:

/**
 * "first_column_name" column must be "Not Null (NN)" for successful result.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE table_name.first_column_name IS NOT NULL;

如果您在存储过程中遇到了这个问题,并且您不能在WHERE子句中使用键,那么您可以通过声明一个变量来解决这个问题,该变量将保留应该更新的行数的限制,然后在更新/删除查询中使用它。

DELIMITER $
CREATE PROCEDURE myProcedure()
BEGIN
    DECLARE the_limit INT;

    SELECT COUNT(*) INTO the_limit
    FROM my_table
    WHERE my_column IS NULL;
        
    UPDATE my_table
    SET my_column = true
    WHERE my_column IS NULL
    LIMIT the_limit;
END$

这适用于Mac,但对于其他操作系统必须相同,除了首选项的位置。

尝试不安全的DELETE操作时得到的错误

在新窗口中,取消选中“安全更新”选项

然后关闭并重新打开连接。无需重新启动服务。

现在我们将再次尝试DELETE,并获得成功的结果。

那么这些安全更新到底是怎么回事呢?这不是一件坏事。这就是MySql的说法。

使用——safe-updates选项

For beginners, a useful startup option is --safe-updates (or --i-am-a-dummy, which has the same effect). It is helpful for cases when you might have issued a DELETE FROM tbl_name statement but forgotten the WHERE clause. Normally, such a statement deletes all rows from the table. With --safe-updates, you can delete rows only by specifying the key values that identify them. This helps prevent accidents. When you use the --safe-updates option, mysql issues the following statement when it connects to the MySQL server:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

在处理生产数据库时,打开这个选项是安全的。否则,您必须非常小心,不要意外删除重要数据。