Page 1 sur 1

Gestion de transaction

Posté : 17 nov. 2006, 10:49
par Flashball
Bonjour,

Je souhaite coder une transaction dans mon application PHP5/MySql: désactivation de l'autocommit, plusieurs insert, et commit.

Seules les librairies "mysql" sont activées (et pas "mysqli") car mon hébergeur ne peut activer que celles-ci. J'ai lu qu'il fallait utiliser un type de table InnoDB pour gérer des transactions: j'ai vérifié dans ma config actuelle, c'est mon cas, mais pas de chance mon hébergeur me fournit lui des tables MyISAM.

Je fournis toutes ces informations en vrac car ce n'est pas très clair dans mon esprit:
- peut-on gérer des transactions avec juste les librairies "mysql", et si oui comment?
- peut-on facilement passer d'un type de table à un autre (MyISAM -> InnoDB et vice-versa)?
- si l'on code une gestion de transaction avec un système de table, que se passe-t-il quand ce code tourne avec un autre système de table? existe-il des solutions génériques?

Je vous remercie par avance de vos éclaircissements!

Flashball

Posté : 17 nov. 2006, 12:06
par Cyrano
Pour vérifier les moteurs disponibles sur ton serveur, si tu as accès à la ligne de commande où à phpMyAdmin, c'est facile avec une simple requête :

Code : Tout sélectionner

SHOW ENGINES;
Si tu passes par phpMyAdmin, en ouvrant la page, ne sélectionne pas de base : au dessus de la liste des bases, clique sur l'icône
 pour vourir une fenêtre de requêtes et colle la requête montrée ci-dessus puis exécute-là : tu auras ta réponse.

Par la suite, il est relativement simple de modifier le moteur utilisé pour une table. Si tu as par exemple une table [i]matable[/i] de type MyISAM, tu peux la transformer en InnoDB comme ceci :
[code]ALTER TABLE `matable` ENGINE InnoDB;[/code]
C'est tout :)

Posté : 17 nov. 2006, 12:26
par Flashball
D'accord, çà marche bien, mon hébergeur possède bien le support InnoDB.

Existe-t-il une commande pour définir ce moteur comme étant celui par défaut lors de la création de mes tables?

Du coup, ma question de départ peut désormais se résumer ainsi: comment gère-t-on une transaction avec les librairies "mysql" et le moteur InnoDB?

(par transaction j'entend une désactivation de l'autocommit, plusieurs opérations en base, et un commit ou rollback final suivant le résultat des opérations en base)

Merci!

Posté : 17 nov. 2006, 12:36
par Cyrano
Si tu es sur serveur dédié et donc que tu as accès au fichier de configuration de MySQL, tu peux définir toi-même le type de moteur à utiliser par défaut. Mais si tu es en mutualisé, alors oublie tout ça et lors de la création de tes tables, ajoute simplement le moteur :

Code : Tout sélectionner

CREATE TABLE ...( ..... )ENGINE InnoDB;
Tout simplement.

Posté : 17 nov. 2006, 17:30
par Flashball
Merci pour les infos sur InnoDB

Concernant ma gestion de transaction, je procède comme ceci

J'ai désormais un code qui ressemble en gros à çà:

En début de transaction:

Code : Tout sélectionner

mysql_query("SET AUTOCOMMIT=0"); mysql_query("BEGIN WORK");
Après j'effectue mes requêtes insert, select, update, etc.

Et je finis avec:

Code : Tout sélectionner

mysql_query("COMMIT"); mysql_query("SET AUTOCOMMIT=1");

Posté : 17 nov. 2006, 17:32
par Cyrano
Ok, ... heu, est-ce qu'il ne manquerait pas une question ? Ou bien tu souhaitais simplement illustrer pour quelle utilisation tu avais besoin de tables InnoDB ?

Posté : 17 nov. 2006, 20:09
par Flashball
heu en fait c'est juste pour répondre à ma propre question que je me posais un peu plus haut! :lol:

Posté : 17 nov. 2006, 20:26
par Cyrano
Et en fin de compte : [Résolu] ou pas ?