CR: add support of interactive transactions for webclients Hello, I dont know how to place an idea (CR) for mySQL. I try it that way.
At the moment I am implementing an "easy-to-use" multiuser webclient for database usage. (phpMyAdmin in contrast is a very powerful tool for people with technical background knowledge and I like to use it.) In an multiuser environment the usage of transactions to avoid data loss by access conflicts between different users is mandatory. But: Webserver (e.g. apache) doesnt keep open the connection to mySQL after the script (e.g. PHP) has been executed. mySQL thread is terminated and any open transaction is "rolled back". Idea (CR): provide new session-variable KEEP_PROCESS and new command CHANGE_PROCESS. ------------------------------------------------------- scenario (simplified): user1 navigates through database SELECT but NOT "for update" user1 likes to "checkout" a row to do some changes: <?PHP mySQL authentification .... START TRANSACTION SELECT .... FOR UPDATE SET @@KEEP_PROCESS=1 // process shall NOT be terminated after connection has been closed SELECT CONNECTION_ID() data is displayed in webclient <FORM> for editing ?> row (InnoDB) is locked for user1 and cannot be "SELECT .... FOR UPDATE" by any other user user1 likes to write the changes back: <?PHP mySQL authentification .... CHANGE_PROCESS $connectionId // process shall be "overtaken" if a lot of conditions are satisfied (see bellow) UPDATE ..... COMMIT SET @@KEEP_PROCESS=NULL // process shall be terminated after connection has been closed ?> ------------------------------------------------------- conditions for CHANGE_PROCESS $connectionId : - user (and host) have to match between currently active (new) process and (old, kept) process with ID=$connectionId - currently active (new) process and (old, kept) process have to have successfully finnished user authentification - (original, last) connection of (old, kept) process has to be terminated before active (new) process can overtake if (original, last) connection has not been terminated then CHANGE_PROCESS is queued until (original, last) connection terminates I have been implementing a "workaround" (around 500 lines of code) that implements the above described behaviour. But this is implemented in C++ as "PHP to MySQL bridge" acting towards PHP as "simulated mySQL server" on port 3307 and acting towards mySQL as "simulated PHP client" on port 3306. This workaround does satisfy my needs but of course it would be much better to have this functionality implemented directly in mySQL if other users need "interactive transactions for webclients" too. Please give me feedback. Thank you very much! Herbert ____________________________________________________________________________________ Don't get soaked. Take a quick peek at the forecast with the Yahoo! Search weather shortcut. http://tools.search.yahoo.com/shortcuts/#loc_weather