|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() ![]() Aurélien Développeur Web Inscription : avril 2006 Messages : 510 ![]() |
bonjour,
j'ai rencontré un comportement étrange de ma BD et après quelques tests j'ai trouvé la solution, sauf que je n'ai compris ni l'origine du problème ni le pourquoi de la solution donc si quelqu'un peut éclairer ma lanterne... en MySQL 5, moteur InnoDB, voilà le script correspondant à la table en question, en ne gardant que le code pertinent : Code :
avec cette structure, une requête comme celle là, le order by n'était pas pris en compte Code :
UPDATE fxc_pages SET page_order = page_order - 1 WHERE site_id = x AND parent_id = y AND page_order <= z AND page_order > t ORDER BY page_order ASC je ne suis pas un pro MySQL et je connais les détails de sa gestion des index et des clés donc si quelqu'un sait... merci d'avance |
||
|
00
|
|
|
#2 |
![]() ![]() |
Euh... ça sert à quoi de faire un ORDER BY sur une requête UPDATE ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Membre chevronné
![]() ![]() Aurélien Développeur Web Inscription : avril 2006 Messages : 510 ![]() |
à l'exécuter sur les enregistrements dans un certain ordre
dans le cas que j'ai présenté j'ai une clé d'unicité sur order, site et parent je dois changer la valeur de order, pour un site et un parent donnés pour le faire en une seule requete sans violer l'unicité, je les ordonne par order ascendant si je dois faire order--, ou par order descendant si je dois faire order++ fin bon c de l'algo de base quoi |
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() |
La clause UPDATE effectue un traitement ensembliste, c'est-à-dire que si tu fait :
Tous les champs sont modifié en même temps, il n'y a donc pas de viol au niveau de l'intégrité. Bien évidement dans l'exécution de la requête il dois y avoir un traitement séquentiel mais, mais le contrôle s'effectue après l'update (comme si on ouvrais une transaction avant, et on faisait un COMIT après). D'ailleurs le DML est une transaction un court moment.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1 Project Lead eXo Social Java Black Belt - Java Black Belt Coach |
|
00
|
|
|
#5 |
|
Membre chevronné
![]() ![]() Aurélien Développeur Web Inscription : avril 2006 Messages : 510 ![]() |
intéressant à savoir, je ne crois pas que j'avais essayé, partant du principe que le contrôle d'intégrité se faisait à chaque modification d'un enregistrement, j'essaie ça dès lundi !
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() ![]() Aurélien Développeur Web Inscription : avril 2006 Messages : 510 ![]() |
nan ba en virant le "order by" sur l'update, ça foire bien en posant une "integrity constraint violation"
donc j'en reviens à ma question de base si quelqu'un sait... |
|
00
|
Copyright © 2000-2012 - www.developpez.com