Table des matières
Mise à jour par lots
性能分析
QUESTION:" >QUESTION:
SOLVE:" >SOLVE:
Maison base de données tutoriel mysql MySQL Advanced (14) Mise à jour par lots et mise à jour par lots de plusieurs enregistrements avec différentes méthodes de mise en œuvre de valeurs

MySQL Advanced (14) Mise à jour par lots et mise à jour par lots de plusieurs enregistrements avec différentes méthodes de mise en œuvre de valeurs

Feb 10, 2017 am 11:03 AM
批量更新

mysql Mise à jour par lots et mise à jour par lots de plusieurs enregistrements avec différentes méthodes d'implémentation de valeurs

Dans mysql nous pouvons utiliser 🎜 >mettre à jour, remplacer par pour fonctionner, ce qui suit est une introduction détaillée à mysql mise à jour et performances par lots.

Mise à jour par lots

mysqlL'instruction de mise à jour est très simple. Elle met à jour un certain champ d'une donnée. Elle est généralement écrite comme ceci : <.>

UPDATE mytable SET myfield = &#39;value&#39; WHERE other_field = &#39;other_value&#39;;
Copier après la connexion


Si vous mettez à jour le même champ avec la même valeur,

mysql est également très simple, il suffit modifier Ça y est :

UPDATE mytable SET myfield = &#39;value&#39; WHERE other_field in (&#39;other_values&#39;);
Copier après la connexion


Notez ici que '

other_values' est une chaîne séparée par une virgule (,), telle que : 1,2,3

Si vous mettez à jour plusieurs éléments de données vers différents valeurs, beaucoup de gens peuvent écrire comme ceci :

foreach ($display_order as $id => $ordinal) { 
    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id"; 
    mysql_query($sql); 
}
Copier après la connexion


consiste à parcourir les enregistrements de mise à jour un par un. Un enregistrement est

mis à jour une fois, ce qui a des performances médiocres et peut facilement provoquer un blocage.

Alors, une instruction

sql peut-elle être utilisée pour implémenter des mises à jour par lots ? mysql ne fournit pas de méthode directe pour implémenter les mises à jour par lots, mais cela peut être réalisé avec quelques astuces.

UPDATE mytable 
    SET myfield = CASE id 
        WHEN 1 THEN &#39;value&#39;
        WHEN 2 THEN &#39;value&#39;
        WHEN 3 THEN &#39;value&#39;
    END
WHERE id IN (1,2,3)
Copier après la connexion
Le petit truc du

cas où est utilisé ici pour réaliser des mises à jour batch.

Par exemple :

UPDATE categories 
    SET display_order = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END
WHERE id IN (1,2,3)
Copier après la connexion


Cette phrase

sql Signification, mettre à jour le champ display_order , si id=1 alors display_order La valeur est 3. Si id=2 alors la valeur de display_order est 4, si id=3 alors la valeur de display_order est 5.

consiste à écrire des instructions conditionnelles ensemble.

La partie

where ici n'affecte pas l'exécution du code, mais améliorera l'efficacité de l'exécution de sql. Assurez-vous que l'instruction sql exécute uniquement le nombre de lignes qui doivent être modifiées. Ici, seuls 3 éléments de données sont mis à jour. , tandis que La clause Where garantit que seules 3 lignes de données sont exécutées.

Si vous mettez à jour plusieurs valeurs, il vous suffit de la modifier légèrement :

UPDATE categories 
    SET display_order = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END, 
    title = CASE id 
        WHEN 1 THEN &#39;New Title 1&#39;
        WHEN 2 THEN &#39;New Title 2&#39;
        WHEN 3 THEN &#39;New Title 3&#39;
    END
WHERE id IN (1,2,3)
Copier après la connexion


Le voici , a déjà terminé une instruction

mysql pour mettre à jour plusieurs enregistrements.

Mais pour l'utiliser en entreprise, il doit être combiné avec un langage côté serveur. Ici, prenez

php comme exemple pour construire ce <. 🎜>mysql Déclaration :

$display_order = array( 
    1 => 4, 
    2 => 1, 
    3 => 2, 
    4 => 3, 
    5 => 9, 
    6 => 5, 
    7 => 8, 
    8 => 9 
); 
$ids = implode(&#39;,&#39;, array_keys($display_order)); 
$sql = "UPDATE categories SET display_order = CASE id "; 
foreach ($display_order as $id => $ordinal) { 
    $sql .= sprintf("WHEN %d THEN %d ", $id, $ordinal); 
} 
$sql .= "END WHERE id IN ($ids)"; 
echo $sql;
Copier après la connexion

这个例子,有8条记录进行更新。代码也很容易理解,你学会了吗

性能分析

当我使用上万条记录利用mysql批量更新,发现使用最原始的批量update发现性能很差,将网上看到的总结一下一共有以下三种办法:

1.批量update,一条记录update一次,性能很差

update test_tbl set dr=&#39;2&#39; where id=1;
Copier après la connexion


2.replace into 或者insert into ...on duplicate key update

replace into test_tbl (id,dr) values (1,&#39;2&#39;),(2,&#39;3&#39;),...(x,&#39;y&#39;);
Copier après la connexion


或者使用

insert into test_tbl (id,dr) values  (1,&#39;2&#39;),(2,&#39;3&#39;),...(x,&#39;y&#39;) on duplicate key update dr=values(dr);
Copier après la connexion


3.创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,&#39;gone&#39;), (1,&#39;xx&#39;),...(m,&#39;yy&#39;);
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
Copier après la connexion


注意:这种方法需要用户有temporary 表的create 权限。

下面是上述方法update 100000条数据的性能测试结果:

逐条update

real 0m15.557s

user 0m1.684s

sys 0m1.372s

replace into

real 0m1.394s

user 0m0.060s

sys 0m0.012s

insert into on duplicate key update

real 0m1.474s

user 0m0.052s

sys 0m0.008s

create temporary table and update:

real 0m0.643s

user 0m0.064s

sys 0m0.004s

就测试结果来看,测试当时使用replace into性能较好。

replace into insert into on duplicate key update的不同在于:

replace into 操作本质是对重复的记录先delete insert,如果更新的字段不全会将缺失的字段置为缺省值

insert into 则是只update重复记录,不会改变其它字段。

QUESTION:

Error Code: 1175. You are using safe update mode and you tried to update a table without a 
WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
Copier après la connexion

SOLVE:

原因是在safe mode,要强制安全点,update只能跟where, 要取消这个限制,可以:

SET SQL_SAFE_UPDATES=0;
Copier après la connexion

以上就是mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Étapes et précautions pour la mise en œuvre des mises à jour par lots à l'aide de procédures stockées Oracle Étapes et précautions pour la mise en œuvre des mises à jour par lots à l'aide de procédures stockées Oracle Mar 08, 2024 pm 04:12 PM

Titre : Étapes et précautions d'implémentation des mises à jour par lots par les procédures stockées Oracle Dans la base de données Oracle, les procédures stockées sont un ensemble d'instructions SQL conçues pour améliorer les performances de la base de données, réutiliser le code et renforcer la sécurité. Les procédures stockées peuvent être utilisées pour mettre à jour les données par lots. Cet article explique comment utiliser les procédures stockées Oracle pour implémenter des mises à jour par lots et fournit des exemples de code spécifiques. Étape 1 : Créer une procédure stockée Tout d’abord, nous devons créer une procédure stockée pour implémenter les opérations de mise à jour par lots. Voici comment créer une procédure stockée

Cas d'application de la mise à jour par lots de procédures stockées Oracle dans le traitement des données Cas d'application de la mise à jour par lots de procédures stockées Oracle dans le traitement des données Mar 08, 2024 am 10:24 AM

Cas d'application de la mise à jour par lots de procédures stockées Oracle dans le traitement des données Dans le traitement réel des données, nous avons souvent besoin de mettre à jour une grande quantité de données dans la base de données. La base de données Oracle fournit la fonction de procédures stockées, qui peuvent gérer efficacement ces opérations de mise à jour de données par lots volumineux et améliorer l'efficacité et les performances du traitement des données. Dans cet article, nous présenterons le cas d'application de la mise à jour par lots des procédures stockées Oracle et fournirons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser cette fonction. Contexte du cas Supposons que nous ayons un

La coopération tacite entre Vue et Excel : comment réaliser la mise à jour et l'importation de données par lots La coopération tacite entre Vue et Excel : comment réaliser la mise à jour et l'importation de données par lots Jul 22, 2023 pm 09:03 PM

La coopération tacite entre Vue et Excel : Comment réaliser la mise à jour par lots et l'importation de données Introduction : Avec le développement rapide des technologies de l'information, les tableaux Excel, en tant qu'outil de gestion de données populaire, sont largement utilisés dans diverses industries et domaines. Dans le même temps, Vue est également très populaire en tant que cadre de développement front-end flexible et efficace. Cet article expliquera comment réaliser une mise à jour par lots et une importation de données grâce à la coopération tacite de Vue et Excel. Pour aider les lecteurs à mieux comprendre, nous donnerons des exemples de code. Implémenter la mise à jour par lots de données : en V

Comment effectuer des opérations de mise à jour d'insertion groupée dans Hibernate ? Comment effectuer des opérations de mise à jour d'insertion groupée dans Hibernate ? Aug 27, 2023 pm 11:17 PM

Dans cet article, nous verrons comment effectuer une insertion/mise à jour groupée dans Hibernate. Chaque fois que nous exécutons une instruction SQL, nous le faisons en effectuant un appel réseau à la base de données. Désormais, si nous devons insérer 10 entrées dans la table de la base de données, nous devons alors effectuer 10 appels réseau. Au lieu de cela, nous pouvons optimiser les appels réseau en utilisant le traitement par lots. Le traitement par lots nous permet d'exécuter un ensemble d'instructions SQL en un seul appel réseau. Pour comprendre et mettre en œuvre cela, définissons notre entité - @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Combinaison efficace de Vue et Excel : comment réaliser une mise à jour par lots et une importation de données Combinaison efficace de Vue et Excel : comment réaliser une mise à jour par lots et une importation de données Jul 21, 2023 pm 10:00 PM

Combinaison efficace de Vue et Excel : comment réaliser une mise à jour et une importation de données par lots. Avec le développement continu des applications Web et la quantité croissante de données, nous rencontrons souvent des situations où nous devons mettre à jour et importer des données par lots. En tant qu'outil de feuille de calcul largement utilisé, Excel dispose de puissantes fonctions de traitement de données et d'importation et d'exportation, et est devenu l'un de nos outils de premier choix pour traiter de grandes quantités de données. Cet article expliquera comment utiliser Vue et Excel pour implémenter la mise à jour par lots et l'importation de données afin d'améliorer l'efficacité du traitement des données. Premièrement, nous avons besoin

Comment résoudre les problèmes de performances de mise à jour de base de données dans le développement Java Comment résoudre les problèmes de performances de mise à jour de base de données dans le développement Java Jun 29, 2023 pm 01:00 PM

Comment résoudre les problèmes de performances de mise à jour des bases de données dans le développement Java Résumé : Avec l'augmentation du volume de données et les changements commerciaux, les problèmes de performances de mise à jour des bases de données sont devenus un défi majeur dans le développement Java. Cet article présentera quelques méthodes et techniques courantes pour résoudre les problèmes de performances de mise à jour de base de données. Mots clés : développement Java, base de données, problèmes de performances de mise à jour, solutions Introduction : Dans la plupart des applications Java, la base de données joue un rôle important. Les performances de la base de données affectent directement la vitesse de réponse et la stabilité de l'application. En développement réel, le nombre

Méthode de mise à jour par lots dans MySQL Méthode de mise à jour par lots dans MySQL Jun 15, 2023 pm 11:36 PM

MySQL est un système de gestion de bases de données relationnelles largement utilisé qui fournit de nombreuses méthodes efficaces de manipulation de données. Lorsqu'une grande quantité de données doit être mise à jour, la méthode de mise à jour par lots peut être utilisée pour améliorer l'efficacité. Cet article présentera la méthode de mise à jour par lots dans MySQL. 1. Qu'est-ce que la mise à jour par lots ? La mise à jour par lots fait référence à la mise à jour de plusieurs lignes de données via une seule instruction SQL. Par rapport à la méthode de mise à jour d'une ligne à la fois, la mise à jour par lots peut réduire efficacement la charge de la base de données et le temps de transmission du réseau, et améliorer l'efficacité et la vitesse des opérations de données. 2. Méthode de mise en œuvre de la mise à jour par lots

Méthode d'implémentation de mise à jour par lots de procédures stockées Oracle Méthode d'implémentation de mise à jour par lots de procédures stockées Oracle Mar 08, 2024 pm 12:27 PM

Titre : Méthode d'implémentation de mise à jour par lots de procédures stockées Oracle Dans la base de données Oracle, l'utilisation de procédures stockées pour mettre à jour les données par lots est une opération courante. Les mises à jour par lots peuvent améliorer l'efficacité du traitement des données, réduire les accès fréquents à la base de données et également réduire la complexité du code. Cet article explique comment utiliser des procédures stockées pour mettre à jour les données par lots dans la base de données Oracle et donne des exemples de code spécifiques. Tout d’abord, nous devons créer une procédure stockée qui implémentera la fonction de mise à jour des données par lots. sous

See all articles