mysql - 调用存储过程时出错 : You are using safe update

标签 mysql

我正在尝试调用存储过程,但收到:错误代码:1175 您正在使用安全更新模式,并且尝试更新没有使用 KEY 列的 WHERE 的表

这是表格:

CREATE TABLE `SystemSetting` (
  `SettingName` varchar(45) NOT NULL,
  `SettingValue` varchar(45) NOT NULL,
  `Deleted` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`SettingName`),
  KEY `PK_SystemSetting` (`SettingName`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

和程序:

DELIMITER $$

CREATE PROCEDURE `SystemSettingCommit` (IN p_SettingName varchar(45), IN p_SettingValue varchar(45), OUT p_Status varchar(55)) 
BEGIN
SET p_Status = '00000';

IF (p_SettingValue IS NULL) OR (RTRIM(LTRIM(p_SettingValue)) = '') THEN
    SET p_Status = `StatusConcat`(p_Status, '10016');
END IF; 

IF (p_SettingName IS NULL) OR (RTRIM(LTRIM(p_SettingName)) = '') THEN
    SET p_Status = `StatusConcat`(p_Status, '10017');
END IF; 

IF (p_Status = '00000') THEN
    IF ((SELECT COUNT(`SettingName`) FROM `SystemSetting` WHERE (`SettingName` = p_SettingName)) > 0) THEN
        UPDATE `SystemSetting` SET `SettingValue` = p_SettingValue WHERE (`SettingName` = p_SettingName);
    ELSE
        INSERT INTO `SystemSetting` (`SettingName`, `SettingValue`) VALUES (p_SettingName, p_SettingValue);
    END IF;
END IF; 
END$$

DELIMITER;

我是这样调用它的:

CALL `SystemSettingCommit` ('Setting1', 'Value1', @Status);

最佳答案

试试这个:

SET SQL_SAFE_UPDATES=0;

或者在工作台中按照以下步骤操作:

  • 转至编辑 --> 首选项
  • 点击“SQL 查询”选项卡并取消选中“安全更新”复选框
  • 查询 --> 重新连接到服务器
  • 现在执行您的 SQL 查询

关于mysql - 调用存储过程时出错 : You are using safe update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334340/

相关文章:

php - 索引列但保持快速插入

php - 在处理用户权限时,如何根据 SQL 表中的值获取所有可能的结果?

php - Mysql autoincrement id or alphanumeric id 作为外键

mysql - 将 LIKE 与 CONCAT 一起使用

java - 如何处理关系数据库中的继承

mysql - 如果一堆列满足某些条件而 GROUP BY 两次,如何不进行计数?

mysql - SQL-如何在 NOT EXIST 语句中显示以 3 秒开头的每个帐户的结果(例如 300,301, 302..)?

android - 检查查询是否在 sqlite for Android 中成功

php - 将许多用户创建的项目聚合到一个 "general"项目中

php - 我的查询是否锁定该行以供下次使用