J'ai passé en revue des questions SO et aucune adresse mon problème spécifique ... J'ai lu les sujets pertinents suivants: Here, en vain.MySQL ON DUPLICATE KEY UPDATE seulement insérer, ne pas mettre à jour
J'ai une table simple avec les données suivantes:
|-----------------------------------------------------------------------------|
| id | contractor_id | section_id | page_id | modified | timestamp |
|-----------------------------------------------------------------------------|
Voici la déclaration créer:
CREATE TABLE `reusable_page_modified` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`contractor_id` int(11) DEFAULT NULL,
`section_id` int(11) DEFAULT NULL,
`page_id` int(11) DEFAULT NULL,
`modified` int(1) NOT NULL DEFAULT '1',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13844 DEFAULT CHARSET=utf8;
Maintenant, j'ai 4 lignes dans la db en ce moment, et ils sont (I « ll s'arrêter id et horodatage car ils sont générés automatiquement):
|---------------------------------------------------------|
| contractor_id | section_id | page_id | modified |
###########################################################
| 1016 | 309 | 10303 | 0 |
|----------------------------------------------------------
| 1017 | 309 | 10303 | 1 |
|----------------------------------------------------------
| 1073 | 309 | 10303 | 1 |
|----------------------------------------------------------
| 240 | 309 | 10303 | 1 |
|----------------------------------------------------------
Je me concentre sur la première ligne où modified
est défini sur 0
. Ce que je veux faire est de le mettre à 1
si contractor_id
, section_id
et page_id
existent tous. Sinon, entrez une nouvelle ligne.
C'est ce que j'ai:
INSERT INTO `reusable_page_modified`
(contractor_id, section_id, page_id, modified)
VALUES ('1016', '309', '10303', '1')
ON DUPLICATE KEY UPDATE
`section_id` = '309'
AND `page_id` = '10303'
AND `contractor_id` = '1016';
Cela crée une nouvelle ligne. Je pense que je ne comprends pas le statut ON DUPLICATE KEY UPDATE
comme il était prévu. J'ai lu la documentation MySQL Here et toujours pas d'aide. Qu'est-ce que je ne vois pas ici?
Je savais que je pensais un peu différemment que prévu. Le 'modified = 1' est logique maintenant que je le regarde. De plus, la contrainte a aussi un sens ... Hâte de devenir myope lorsque vous observez quelque chose pendant trop longtemps! Merci pour votre contribution! – Zak