2

Je dois ajouter plusieurs enregistrements à une base de données mysql. J'ai essayé avec plusieurs requêtes et son fonctionnement bien, mais pas efficace. Donc, je l'ai essayé avec une seule requête comme ci-dessous,insérer mettre à jour plusieurs lignes mysql

INSERT INTO data (block, length, width, rows) VALUES 
    ("BlockA", "200", "10", "20"), 
    ("BlockB", "330", "8", "24"), 
    ("BlockC", "430", "7", "36") 
ON DUPLICATE KEY UPDATE 
    block=VALUES(block), 
    length=VALUES(length), 
    width=VALUES(width), 
    rows=VALUES(rows) 

Mais toujours mettre à jour la table (colonnes sont BLOCK_ID, bloc, longueur, largeur, lignes). Dois-je faire des changements sur la requête en ajoutant block_id aussi. block_id est la clé primaire. Toute aide serait appréciée.

+0

Qu'est-ce que les clés de la table 'données'? – DavidLin

+0

l'article est mis à jour (block_id est la clé primaire) – Irawana

+0

J'ai exécuté votre requête sans problème, êtes-vous sûr que vous n'avez pas d'autres clés définies avec la table de données? Et assurez-vous également que l'option 'auto increment' est définie pour le champ id – DavidLin

Répondre

1

J'ai exécuté votre requête sans aucun problème, êtes-vous sûr que vous n'avez pas d'autres clés définies avec la table de données? Et assurez-vous également que l'incrémentation automatique est activée pour le champ id. sans auto_increment, la requête mise à jour toujours ligne existante

** * ** Mise à jour ** * ** * ****

Désolé je Je me suis trompé sur tes questions. Oui, avec une seule clé auto_increment, la requête insère toujours de nouvelles lignes au lieu de la mettre à jour (car la clé primaire est le seul moyen de détecter 'duplication/existant'), car la clé est auto_increment, il n'y a jamais de duplication La clé primaire n'est pas donnée dans la requête d'insertion.

Je pense que ce que vous voulez atteindre est différent, vous voudrez peut-être mettre en place une clé composite unique sur tous les champs (c.-à-bloc, champ, largeur, lignes)

Soit dit en passant, je l'ai mis en place un SQL violon pour vous. http://sqlfiddle.com/#!2/e7216/1

La syntaxe pour ajouter la clé unique:

CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`block` varchar(10) DEFAULT NULL, 
`length` int(11) DEFAULT NULL, 
`width` int(11) DEFAULT NULL, 
`rows` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `uniqueme` (`block`,`length`,`width`,`rows`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 
+0

block_id est le seul identifiant disponible. Aussi son incrément automatique. Lorsque je réexécute cette requête, j'ajoute à nouveau ces données au lieu de les mettre à jour. – Irawana

Questions connexes