MariaDB INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE影响0行

时间:2016-03-10 06:06:31

标签: php mysql sql-server sql-insert mariadb

我在MariaDB中创建了下表

表格创建

CREATE TABLE `email_templates_pending` (
  `template_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `template_name` varchar(100) NOT NULL,
  `template_data` text,
  `modify_type` varchar(16) NOT NULL,
  `modify_by` varchar(50) NOT NULL,
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`template_id`),
  UNIQUE KEY `template_name` (`template_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

在该表中使用template_id = 1插入一行。我想使用下面的INSERT INTO...SELECT...ON DUPLICATE KEY UPDATE语句更新行

SQL语句

INSERT INTO email_templates_pending
          (template_id, template_name, template_data,  modify_by,    modify_type) 
    SELECT template_id, template_name, template_data, 'test@test.com', 'Deleted'
        FROM email_templates WHERE template_id= '1' 
ON DUPLICATE KEY UPDATE modify_type='Deleted'

但是,当我运行该语句时,它返回成功,但是0 rows affected。我有另一个类似的表,具有不同的列名称,按预期工作。我确保template_id是主键,所以我不确定问题还有什么?

2 个答案:

答案 0 :(得分:1)

在email_templates_pending中有1行,但在email_templates中没有行。

这可能是0行受影响的原因。源表中没有行。

INSERT INTO email_templates_pending ...
SELECT ... FROM email_templates

如果您只想更新id = 1,可以使用:

INSERT INTO email_templates_pending (template_id, template_name, template_data, modify_by, modify_type) 
SELECT template_id, template_name, template_data, 'test@test.com', 'Deleted' FROM email_templates_pending 
ON DUPLICATE KEY UPDATE modify_type='Deleted';

如果你只需要做UPDATE,也可以直接使用UPDATE语句。

UPDATE email_templates_pending SET modify_type='Deleted' WHERE template_id= '1';

答案 1 :(得分:0)

如果ID#1已存在,已标记为"已删除",您将正确地获得" 0行受影响"。

为了证明情况并非如此,让我们看看

的输出
SELECT template_id, template_name, template_data,  modify_by,    modify_type
    FROM email_templates WHERE template_id= '1' ;