Eléphant du PHP |
245 Messages
26 sept. 2011, 11:42
Merci Moogli, la doc sur les problèmes de LOCKAGE est intéressante.
En fait j'ai simplifié mes requêtes SQL, mais il y a aussi une transaction
LOCK t1 WRITE, t2 WRITE;
SET AUTOCOMMIT =0;
START TRANSACTION;
UPDATE t1 SET col1='test' WHERE id=1;
INSERT INTO t2 (id_t1) value(1);
COMMIT; -- ou ROLLBACK;
UNLOCK TABLES;
Lorsque j'instancie un objet, il me faut modifier 2 tables. La transaction me permet de valider les requêtes sur les 2 tables ou de les invalider toutes les 2 en cas de problème.
Elle ne concerne qu'un objet.
Après, non seulement, je veux que cela se passe bien pour un objet, mais je ne veux pas qu'un autre objet s'instancie au même moment et me fasse un truc du genre
UPDATE t1 SET col1='test' WHERE id=1;
UPDATE t1 SET col1='test' WHERE id=2;
INSERT INTO t2 (id_t1) value(1);
INSERT INTO t2 (id_t1) value(2);
(même si la cohérence des données est sauvegardée pour chaque objet grâce à une transaction)
Je veux forcément un truc du gene :
UPDATE t1 SET col1='test' WHERE id=1;
INSERT INTO t2 (id_t1) value(1);
--puis
UPDATE t1 SET col1='test' WHERE id=2;
INSERT INTO t2 (id_t1) value(2);
Pour cela, je ne vois que le lockage de tables.
Je pensais qu'il existait un moyen simple de locker les tables en écriture mais pas en lecture. READ LOCAL permet exactement le contraire.
J'avoue mon problème est un peu particulier, mais bon...