Я создал следующую таблицу в MariaDBMariaDB INSERT INTO ... SELECT ... дублирование KEY UPDATE, затрагивающий 0 строк
создание Таблицы
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, '[email protected]', 'Deleted'
FROM email_templates WHERE template_id= '1'
ON DUPLICATE KEY UPDATE modify_type='Deleted'
Однако, когда я запускаю заявление возвращается успешно, но с 0 rows affected
. У меня есть другая подобная таблица с разными именами столбцов, которая работает по назначению. Я гарантировал, что template_id является основным ключом, поэтому я не уверен, что еще может быть проблемой?
Можно ли обновить синтаксис, так что не полагается на столе email_templates? – Jester
Почему бы просто не использовать ОБНОВЛЕНИЕ? @Jester –
Способ архивирования кода на самом деле требует захвата значения из таблицы email_template, если он не существует в таблице email_template_pending. Вы предлагаете запустить второй оператор UPDATE после INSERT SELECT? – Jester