Ò»¡¢ÎÊÌâÒý³ö
¢Ù ¼ÙÉèµ±µ±ÍøÉÏÓû§Ïµ¥ÂòÁ˱¾Ê飬ÕâʱÊý¾Ý¿âÖÐÓÐÌõ¶©µ¥ºÅΪ001µÄ¶©µ¥£¬ÆäÖÐÓиöstatus×Ö¶ÎÊÇ¡¯ÓÐЧ¡¯,±íʾ¸Ã¶©µ¥ÊÇÓÐЧµÄ£»
¢Ú ºǫ́¹ÜÀíÈËÔ±²éѯµ½ÕâÌõ001µÄ¶©µ¥£¬²¢ÇÒ¿´µ½×´Ì¬ÊÇÓÐЧµÄ£»
¢Û Óû§·¢ÏÖϵ¥µÄʱºòÏ´íÁË£¬ÓÚÊdz·Ïú¶©µ¥£¬¼ÙÉèÔËÐÐÕâÑùÒ»ÌõSQL: update order_table set status = ¡®È¡Ïû¡¯ where order_id = 001£»
¢Ü ºǫ́¹ÜÀíÈËÔ±ÓÉÓÚÔÚ¢ÚÕâ²½¿´µ½×´Ì¬ÓÐЧµÄ£¬Õâʱ£¬ËäÈ»Óû§ÔÚ¢ÛÕâ²½ÒѾ³·ÏúÁ˶©µ¥£¬¿ÉÊǹÜÀíÈËÔ±²¢Î´Ë¢Ð½çÃæ£¬¿´µ½µÄ¶©µ¥×´Ì¬»¹ÊÇÓÐЧµÄ£¬ÓÚÊǵã»÷¡±·¢»õ¡±°´Å¥£¬½«¸Ã¶©µ¥·¢µ½ÎïÁ÷²¿ÃÅ£¬Í¬Ê±ÔËÐÐÀàËÆÈçÏÂSQL£¬½«¶©µ¥×´Ì¬¸Ä³ÉÒÑ·¢»õ:update order_table set status = ¡®ÒÑ·¢»õ¡¯ where order_id = 001£»
¶þ¡¢¸ÅÄî
ΪÁ˵õ½×î´óµÄÐÔÄÜ£¬Ò»°ãÊý¾Ý¿â¶¼Óв¢·¢»úÖÆ£¬²»¹ý´øÀ´µÄÎÊÌâ¾ÍÊÇÊý¾Ý·ÃÎʵijåÍ»¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬´ó¶àÊýÊý¾Ý¿âµÄ·½·¨¾ÍÊÇÊý¾ÝµÄËø¶¨¡£
±¯¹ÛËø£º¶ÔÊý¾ÝµÄ³åÍ»²ÉȡһÖÖ±¯¹ÛµÄ̬¶È£¬Ò²¾ÍÊÇ˵¼ÙÉèÊý¾Ý¿Ï¶¨»á³åÍ»£¬ËùÒÔÔÚÊý¾Ý¿ªÊ¼¶ÁÈ¡µÄʱºò¾Í°ÑÊý¾ÝËø¶¨×¡¡£
ÀÖ¹ÛËø£ºÈÏΪÊý¾ÝÒ»°ãÇé¿öϲ»»áÔì³É³åÍ»£¬ËùÒÔÔÚÊý¾Ý½øÐÐÌá½»¸üеÄʱºò£¬²Å»áÕýʽ¶ÔÊý¾ÝµÄ³åÍ»Óë·ñ½øÐмì²â£¬Èç¹û·¢ÏÖ³åÍ»ÁË£¬ÔòÈÃÓû§·µ»Ø´íÎóµÄÐÅÏ¢£¬ÈÃÓû§¾ö¶¨ÈçºÎÈ¥×ö¡£
Ôà¶Á£ºµ±Ò»¸öÊÂÎñ¶ÁÈ¡ÆäËûÍê³ÉÒ»°ëÊÂÎñµÄ¼Ç¼ʱ£¬¾Í»á·¢ÉúÔà¶Á¡£ÀýÈ磺Óû§A¡¢B¿´µ½µÄÖµ¶¼ÊÇ6£¬Óû§B°ÑÖµ¸ÄΪ2£¬Óû§A¶½µ¼µÄÖµÈÔΪ6.
¶ªÊ§¸üУºÒ»¸öÊÂÎñµÄ¸üи²¸ÇÁËÆäËûÊÂÎñµÄ¸üнá¹û¡£ÀýÈ磺Óû§A°ÑÖµ´Ó6¸ÄΪ2£¬Óû§B°ÑÖµ´Ó2¸ÄΪ6£¬ÔòÓû§A¶ªÊ§ÁËËûµÄ¸üС£
ÉÏÃæ³¡¾°¾ÍÊǵäÐ͵ġ®Ôà¶Á¡¯£¬ Êý¾Ý¿âµÄÀÖ¹ÛËø×ö·¨ºÍ±¯¹ÛËø×ö·¨Ö÷Òª¾ÍÊǽâ¾öÉÏÃæ³¡¾°²¢·¢µÄÎÊÌ⣡£¡£¡?
Èý¡¢±¯¹ÛËø
SqlServer£ºÊý¾ÝµÄËø¶¨Í¨³£²ÉÓÃÒ³¼¶ËøµÄ·½Ê½£¬Ò²¾ÍÊÇ˵¶ÔÒ»ÕűíÄÚµÄÊý¾ÝÊÇÒ»ÖÖ´®Ðл¯µÄ¸üвåÈë»úÖÆ£¬ÔÚÈκÎʱ¼äͬһÕűíÖ»»á²å1ÌõÊý¾Ý£¬±ðµÄÏë²åÈëµÄÊý¾ÝÒªµÈµ½ÕâÒ»ÌõÊý¾Ý²åÍêÒÔºó²ÅÄÜÒÀ´Î²åÈë¡£´øÀ´µÄºó¹û¾ÍÊÇÐÔÄܵĽµµÍ£¬ÔÚ¶àÓû§²¢·¢·ÃÎʵÄʱºò£¬µ±¶ÔÒ»ÕÅ±í½øÐÐÆµ·±²Ù×÷ʱ£¬»á·¢ÏÖÏìӦЧÂʺܵͣ¬Êý¾Ý¿â¾³£´¦ÓÚÒ»ÖÖ¼ÙËÀ״̬¡£
Oracle£ºÓõÄÊÇÐм¶Ëø£¬Ö»ÊǶÔÏëËø¶¨µÄÊý¾Ý²Å½øÐÐËø¶¨£¬ÆäÓàµÄÊý¾Ý²»Ïà¸É£¬ËùÒÔÔÚ¶ÔOracle±íÖв¢·¢²åÊý¾ÝµÄʱºò£¬»ù±¾Éϲ»»áÓÐÈκÎÓ°Ïì¡£
OracleµÄ±¯¹ÛËøÐèÒªÀûÓÃÒ»ÌõÏÖÓеÄÁ¬½Ó£¬·Ö³ÉÁ½ÖÖ·½Ê½£¬´ÓSQLÓï¾äµÄÇø±ðÀ´¿´£¬¾ÍÊÇÒ»ÖÖÊÇfor update£¬Ò»ÖÖÊÇfor update nowaitµÄÐÎʽ¡£
¢Ù Ö´ÐÐselect xxx for update²Ù×÷ʱ£¬Êý¾Ý»á±»Ëø¶¨£¬Ö»ÓÐÖ´ÐÐcomit»òrollover²Å»áÊÍ·Å
¢Ú Ö´ÐÐselect xxx for update nowait²Ù×÷ʱ£¬Êý¾ÝÒ²»á±»Ëø¶¨£¬ÆäËûÈË·ÃÎÊʱ»ò·µ»ØORA-00054´íÎó£¬ÄÚÈÝÊÇ×ÊÔ´Õý棬ÐèÒª²ÉÈ¡ÏàÓ¦µÄÒµÎñ´ëÊ©½øÐд¦Àí¡£
OracleÖеı¯¹ÛËø¾ÍÊÇÀûÓÃOracleµÄConnection¶ÔÊý¾Ý½øÐÐËø¶¨¡£ÔÚOracleÖУ¬ÓÃÕâÖÖÐм¶Ëø´øÀ´µÄÐÔÄÜËðʧÊǺÜСµÄ£¬Ö»ÊÇҪעÒâ³ÌÐòÂß¼£¬²»Òª¸øÄãÒ»²»Ð¡Ðĸã³ÉËÀËøÁ˾ͺ᣶øÇÒÓÉÓÚÊý¾ÝµÄ¼°Ê±Ëø¶¨£¬ÔÚÊý¾ÝÌύʱºò¾Í²»ºô³öÏÖ³åÍ»£¬¿ÉÒÔʡȥºÜ¶àÄÕÈ˵ÄÊý¾Ý³åÍ»´¦Àí¡£È±µã¾ÍÊÇÄã±ØÐëҪʼÖÕÓÐÒ»ÌõÊý¾Ý¿âÁ¬½Ó£¬¾ÍÊÇ˵ÔÚÕû¸öËø¶¨µ½×îºó·Å¿ªËøµÄ¹ý³ÌÖУ¬ÄãµÄÊý¾Ý¿âÁ¬½ÓҪʼÖÕ±£³Öס¡£
ËÄ¡¢ÀÖ¹ÛËø
ÀÖ¹ÛËø¾ÍÊÇÒ»¿ªÊ¼¼ÙÉè²»»áÔì³ÉÊý¾Ý³åÍ»£¬ÔÚ×îºóÌá½»µÄʱºòÔÙ½øÐÐÊý¾Ý³åÍ»¼ì²â¡£ÔÚÀÖ¹ÛËøÖУ¬ÎÒÃÇÓÐ3ÖÖ³£ÓõÄ×ö·¨À´ÊµÏÖ£º
¢ÙµÚÒ»ÖÖ¾ÍÊÇÔÚÊý¾ÝÈ¡µÃµÄʱºò°ÑÕû¸öÊý¾Ý¶¼copyµ½Ó¦ÓÃÖУ¬ÔÚ½øÐÐÌá½»µÄʱºò±È¶Ôµ±Ç°Êý¾Ý¿âÖеÄÊý¾ÝºÍ¿ªÊ¼µÄʱºò¸üÐÂǰȡµÃµÄÊý¾Ý¡£µ±·¢ÏÖÁ½¸öÊý¾ÝһģһÑùÒԺ󣬾ͱíʾûÓгåÍ»¿ÉÒÔÌá½»£¬·ñÔòÔòÊDz¢·¢³åÍ»£¬ÐèҪȥÓÃÒµÎñÂß¼½øÐнâ¾ö¡£
¢ÚµÚ¶þÖÖÀÖ¹ÛËøµÄ×ö·¨¾ÍÊDzÉÓð汾´Á£¬Õâ¸öÔÚHibernateÖеõ½ÁËʹÓᣲÉÓð汾´ÁµÄ»°£¬Ê×ÏÈÐèÒªÔÚÄãÓÐÀÖ¹ÛËøµÄÊý¾Ý¿âtableÉϽ¨Á¢Ò»¸öеÄcolumn£¬±ÈÈçΪnumberÐÍ£¬µ±ÄãÊý¾Ýÿ¸üÐÂÒ»´ÎµÄʱºò£¬°æ±¾Êý¾Í»áÍùÉÏÔö¼Ó1¡£±ÈÈçͬÑùÓÐ2¸ösessionͬÑù¶ÔijÌõÊý¾Ý½øÐвÙ×÷¡£Á½Õß¶¼È¡µ½µ±Ç°µÄÊý¾ÝµÄ°æ±¾ºÅΪ1£¬µ±µÚÒ»¸ösession½øÐÐÊý¾Ý¸üкó£¬ÔÚÌá½»µÄʱºò²é¿´µ½µ±Ç°Êý¾ÝµÄ°æ±¾»¹Îª1£¬ºÍ×Ô¼ºÒ»¿ªÊ¼È¡µ½µÄ°æ±¾Ïàͬ¡£¾ÍÕýʽÌá½»£¬È»ºó°Ñ°æ±¾ºÅÔö¼Ó1£¬Õâ¸öʱºòµ±Ç°Êý¾ÝµÄ°æ±¾Îª2¡£µ±µÚ¶þ¸ösessionÒ²¸üÐÂÁËÊý¾ÝÌá½»µÄʱºò£¬·¢ÏÖÊý¾Ý¿âÖа汾Ϊ2£¬ºÍÒ»¿ªÊ¼Õâ¸ösessionÈ¡µ½µÄ°æ±¾ºÅ²»Ò»Ö£¬¾ÍÖªµÀ±ðÈ˸üйý´ËÌõÊý¾Ý£¬Õâ¸öʱºòÔÙ½øÐÐÒµÎñ´¦Àí£¬±ÈÈçÕû¸öTransaction¶¼RollbackµÈµÈ²Ù×÷¡£ÔÚÓð汾´ÁµÄʱºò£¬¿ÉÒÔÔÚÓ¦ÓóÌÐò²àʹÓð汾´ÁµÄÑéÖ¤£¬Ò²¿ÉÒÔÔÚÊý¾Ý¿â²à²ÉÓÃTrigger(´¥·¢Æ÷)À´½øÐÐÑéÖ¤¡£²»¹ýÊý¾Ý¿âµÄTriggerµÄÐÔÄÜ¿ªÏú»¹ÊDZȽϵĴó£¬ËùÒÔÄÜÔÚÓ¦ÓÃ²à½øÐÐÑéÖ¤µÄ»°»¹ÊÇÍÆ¼ö²»ÓÃTrigger¡£
¢ÛµÚÈýÖÖ×ö·¨ºÍµÚ¶þÖÖ×ö·¨ÓеãÀàËÆ£¬¾ÍÊÇÒ²ÐÂÔöÒ»¸öTableµÄColumn£¬²»¹ýÕâ´ÎÕâ¸öcolumnÊDzÉÓÃtimestampÐÍ£¬´æ´¢Êý¾Ý×îºó¸üеÄʱ¼ä¡£ÔÚOracle9iÒÔºó¿ÉÒÔ²ÉÓÃеÄÊý¾ÝÀàÐÍ£¬Ò²¾ÍÊÇtimestamp with time zoneÀàÐÍÀ´×öʱ¼ä´Á¡£ÕâÖÖTimestampµÄÊý¾Ý¾«¶ÈÔÚOracleµÄʱ¼äÀàÐÍÖÐÊÇ×î¸ßµÄ£¬¾«È·µ½Î¢Ãë(»¹Ã»Óëµ½ÄÉÃëµÄ¼¶±ð)£¬Ò»°ãÀ´Ëµ£¬¼ÓÉÏÊý¾Ý¿â´¦Àíʱ¼äºÍÈ˵Ä˼¿¼¶¯×÷ʱ¼ä£¬Î¢Ãë¼¶±ðÊǷdz£·Ç³£¹»ÁË£¬ÆäʵֻҪ¾«È·µ½ºÁÃëÉõÖÁÃë¶¼Ó¦¸ÃûÓÐʲôÎÊÌâ¡£ºÍ¸Õ²ÅµÄ°æ±¾´ÁÀàËÆ£¬Ò²ÊÇÔÚ¸üÐÂÌá½»µÄʱºò¼ì²éµ±Ç°Êý¾Ý¿âÖÐÊý¾ÝµÄʱ¼ä´ÁºÍ×Ô¼º¸üÐÂǰȡµ½µÄʱ¼ä´Á½øÐжԱȣ¬Èç¹ûÒ»ÖÂÔòOK£¬·ñÔò¾ÍÊǰ汾³åÍ»¡£Èç¹û²»Ïë°Ñ´úÂëдÔÚ³ÌÐòÖлòÕßÓÉÓÚ±ðµÄÔÒòÎÞ·¨°Ñ´úÂëдÔÚÏÖÓеijÌÐòÖУ¬Ò²¿ÉÒÔ°ÑÕâ¸öʱ¼ä´ÁÀÖ¹ÛËøÂ߼дÔÚTrigger»òÕß´æ´¢¹ý³ÌÖС£
Îå¡¢½áÂÛ
¢Ù Èç¹ûϵͳ²¢·¢Á¿²»´óÇÒ²»ÔÊÐíÔà¶Á£¬¿ÉÒÔʹÓñ¯¹ÛËø½â¾ö²¢·¢ÎÊÌâ¡£
¢Ú Èç¹ûϵͳ²¢·¢·Ç³£´óµÄ»°£¬±¯¹ÛËø»á´øÀ´ºÜ´óÐÔÄÜÎÊÌ⣬ËùÒÔÒ»°ã²ÉÓÃÀÖ¹ÛËø¡£
Áù¡¢²Î¿¼×ÊÁÏ
[1] oracleµÄÀÖ¹ÛËøºÍ±¯¹ÛËø http://www.blogjava.net/cheneyfree/archive/2008/01/25/177773.html
[2] ÀÖ¹ÛËøºÍ±¯¹ÛËøµÄÇø±ð http://www.cnblogs.com/Bob-FD/p/3352216.html