Rouven: MySQL: Autoimcrement ohne Key?

Beitrag lesen

Hello,

Gibts ne Möglichkeit das SQL performanter zu schreiben oder das ganze irgendwie mit TRIGGER oder FUNCTIONS (kenn mich mit MySQL sehr wenig aus).

ja, und zwar genau so wie du es bisher machst, nur technisch eleganter. Deine aktuelle SELECT-MAX-INSERT-Lösung krankt daran, dass es kein Locking gibt, d.h. potenziell tragen zwei parallele Transaktionen parallel die selbe ID ein. Was du machen kannst ist dir einen ON INSERT-Trigger zu setzen, der genau diese ID in einem Schritt generiert. Schematisch sollte die Syntax etwa wie folgt aussehen:

  
CREATE TRIGGER generate_id  
AFTER INSERT ON entries  
FOR EACH ROW BEGIN  
   UPDATE entries e  
   SET entry_id = (SELECT MAX(entry_id) FROM entries WHERE blog_id = e.blog_id) + 1  
   WHERE entries.id = NEW.id  
END  

MfG
Rouven

--
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)