ÈçºÎɾ³ý SQL Server ±íÖеÄÖظ´ÐÐ
Microsoft SQL Server ±í²»Ó¦¸Ã°üº¬Öظ´ÐкͷÇΨһÖ÷¼ü¡£Îª¼ò½àÆð¼û£¬ÔÚ±¾ÎÄÖÐÎÒÃÇÓÐʱ³ÆÖ÷¼üΪ“¼ü”»ò“PK”£¬µ«ÕâʼÖÕ±íʾ“Ö÷¼ü”¡£Öظ´µÄ PK Î¥·´ÁËʵÌåÍêÕûÐÔ£¬ÔÚ¹ØϵϵͳÖÐÊDz»ÔÊÐíµÄ¡£SQL Server Óи÷ÖÖÇ¿ÖÆÖ´ÐÐʵÌåÍêÕûÐԵĻúÖÆ£¬°üÀ¨Ë÷Òý¡¢Î¨Ò»Ô¼Êø¡¢Ö÷¼üÔ¼ÊøºÍ´¥·¢Æ÷¡£
¾¡¹ÜÈç´Ë£¬ÔÚijЩÇé¿öÏ»¹¿ÉÄÜ»á³öÏÖÖظ´µÄÖ÷¼ü;Èç¹û³öÏÖ´ËÀàÇé¿ö£¬¾Í±ØÐëÇå³ýÖظ´Ö÷¼ü¡£³öÏÖÖظ´Ö÷¼üµÄÇéÐÎÖ®Ò»ÊÇ£¬ÔÚ SQL Server ÍⲿµÄ·Ç¹ØϵÊý¾ÝÖдæÔÚÖظ´µÄ PK£¬ÔÚµ¼ÈëÕâЩÊý¾ÝʱûÓÐÇ¿ÖÆÖ´ÐÐ PK ΨһÐÔ¡£³öÏÖÖظ´Ö÷¼üµÄÁíÒ»ÖÖÇéÐÎÀ´×ÔÊý¾Ý¿âÉè¼Æ´íÎó£¬ÈçûÓжÔÿÕűíÇ¿ÖÆÖ´ÐÐʵÌåÍêÕûÐÔ¡£
¡¡¡¡Í¨³£ÔÚ³¢ÊÔ´´½¨Î¨Ò»Ë÷Òýʱ»á·¢ÏÖÖظ´µÄ PK£¬ÒòΪÈç¹ûÕÒµ½Öظ´µÄ¼ü£¬Î¨Ò»Ë÷ÒýµÄ´´½¨¼´»áÖÐÖ¹£¬²¢ÇÒ½«ÏÔʾÒÔÏÂÏûÏ¢£º
¡¡¡¡Msg 1505, Level 16, State 1 Create unique index aborted on duplicate key.
¡¡¡¡Èç¹ûʹÓõÄÊÇ SQL Server 2000 »ò SQL Server 2005£¬Ôò»áÊÕµ½ÒÔÏ´íÎóÏûÏ¢£º
¡¡¡¡Msg 1505, Level 16, State 1 CREATE UNIQUE INDEX terminated because a duplicate key was found for object name '%.*ls' and index name '%.*ls'.The duplicate key value is %ls.
¡¡¡¡±¾ÎÄÌÖÂÛÈçºÎ²éÕÒºÍɾ³ý±íÖÐÖظ´µÄÖ÷¼ü¡£µ«ÊÇ£¬ÄúÓ¦¸Ã×Ðϸ¼ì²é³öÏÖÖظ´¼üµÄ½ø³ÌÒÔ±ÜÃâÖظ´³öÏÖ¡£
¡¡¡¡¸ü¶àÐÅÏ¢
¡¡¡¡ÔÚ¸ÃʾÀýÖУ¬ÎÒÃǽ«Ê¹ÓÃÏÂ±í£¬Ëü¾ßÓÐÖظ´µÄ PK Öµ¡£ÔڸñíÖУ¬Ö÷¼üÊÇÁ½ÁÐ(col1¡¢col2)¡£ÎÒÃÇÎÞ·¨´´½¨Î¨Ò»Ë÷Òý»òÖ÷¼üÔ¼Êø£¬ÒòΪÕâÁ½ÐоßÓÐÖظ´µÄ PK¡£¸Ã¹ý³ÌÑÝʾÈçºÎʶ±ðºÍɾ³ýÖظ´µÄÖ÷¼ü¡£
¡¡¡¡create table t1(col1 int, col2 int, col3 char(50))
¡¡¡¡insert into t1 values (1, 1, 'data value one')
¡¡¡¡insert into t1 values (1, 1, 'data value one')
¡¡¡¡insert into t1 values (1, 2, 'data value two')
¡¡¡¡µÚÒ»²½ÊÇʶ±ðÄÄЩÐоßÓÐÖظ´µÄÖ÷¼üÖµ£º
¡¡¡¡SELECT col1, col2, count(*)
¡¡¡¡from t1
¡¡¡¡GROUP BY col1, col2
¡¡¡¡HAVING count(*) > 1
¡¡¡¡Õ⽫Ϊ±íÖеÄÿ×éÖظ´µÄ PK Öµ·µ»ØÒ»ÐС£´Ë½á¹ûÖеÄ×îºóÒ»ÁÐÊÇÌض¨ PK ÖµµÄÖظ´Êý¡£
¡¡¡¡col1c
Ïà¹ØÎĵµ£º
¿Î³ÌËÄ ×麯Êý
¡¡¡¡
¡¡¡¡±¾¿ÎÖص㣺
¡¡¡¡1¡¢Á˽â¿ÉÓõÄ×麯Êý
¡¡¡¡2¡¢ËµÃ÷ÿ¸ö×麯ÊýµÄʹÓ÷½·¨
¡¡¡¡3¡¢Ê¹ÓÃGROUP BY
¡¡¡¡4¡¢Í¨¹ýHAVINGÀ´ÏÞÖÆ·µ»Ø×é
¡¡¡¡×¢Ò⣺ÒÔÏÂʵÀýÖбêµã¾ùΪӢÎÄ°ë½Ç
¡¡¡¡Ò»¡¢¸ÅÄ
¡¡¡¡×麯ÊýÊÇÖ¸°´Ã¿×é·µ»Ø½á¹ûµÄº¯Êý¡£
¡¡¡¡×麯Êý¿ÉÒÔ³öÏÖÔÚSELECTºÍHAVING ×Ö¶ÎÖС£
¡¡¡¡GROUP ......
¿Î³ÌÊ®Èý ʹÓÃ×éºÏÊý¾ÝÀàÐÍ* Óαê²Ù×ÝÊý¾Ý
¡¡¡¡
¡¡¡¡±¾¿ÎÖص㣺
¡¡¡¡1¡¢´´½¨Óû§×Ô¶¨ÒåµÄPLSQL¼Ç¼
¡¡¡¡2¡¢ÀûÓÃ%ROWTYPEÊôÐÔÀ´´´½¨¼Ç¼
¡¡¡¡3¡¢´´½¨PLSQL±í
¡¡¡¡4¡¢ÃèÊö¼Ç¼¡¢±í¡¢¼Ç¼µÄ±íÖ®¼äµÄÇø±ð
¡¡¡¡×¢Ò⣺ÒÔÏÂʵÀýÖбêµã¾ùΪӢÎÄ°ë½Ç
¡¡¡¡Ò»¡¢ºÏ³ÉÊý¾ÝÀàÐÍ
¡¡¡¡1¡¢ÀàÐÍ·ÖΪPLSQL¼Ç¼ºÍPLSQL±í
¡¡¡¡2¡ ......
×îºóÒ»¿Î Òì³£´¦Àí±¾ÕÂÖص㣺
¡¡¡¡
¡¡¡¡1¡¢¶¨ÒåPLSQLÒì³£
¡¡¡¡2¡¢Áоٲ»Í¬µÄÒì³£´¦Àí·½·¨
¡¡¡¡3¡¢²¶»ñ·ÇÔ¤ÆڵĴíÎó
¡¡¡¡4¡¢ÃèÊöÒì³£µÄÓ°Ïì
¡¡¡¡5¡¢¶¨ÖÆÒì³£µÄ·µ»ØÐÅÏ¢¡¡¡¡Ò»¡¢PLSQLÒì³£´¦Àí
¡¡¡¡Òì³£ÊÇÓÉORACLE´íÎó»òÏÔʽµÄÅ׳öÒ»¸ö´íÎó²úÉúµÄ¡£
¡¡¡¡ÈçºÎ´¦Àí£º
¡¡¡¡ÓÃÒ»¸ö´¦Àí³ÌÐòÀ´²¶»ñËü£»
¡¡¡¡½«Ëü´«µÝ ......
NO ACTION
Ö¸¶¨Èç¹ûÊÔͼɾ³ý/ÐÞ¸ÄijһÐУ¬¶ø¸ÃÐеļü±»ÆäËû±íµÄÏÖÓÐÐÐÖеÄÍâ¼üËùÒýÓã¬Ôò²úÉú´íÎ󲢻عö DELETE/UPDATEÓï¾ä¡£
CASCADE¡¢SET NULL ºÍ SET DEFAULT
ÔÊÐíͨ¹ýɾ³ý»ò¸üмüÖµÀ´Ó°ÏìÖ¸¶¨¾ßÓÐÍâ¼ü¹ØϵµÄ±í£¬ÕâЩÍâ¼ü¹Øϵ¿É×·Ëݵ½ÔÚÆäÖнøÐÐÐÞ¸ÄµÄ±í¡£Èç¹ûΪĿ±ê±íÒ²¶¨ÒåÁ˼¶ÁªÒýÓòÙ×÷£¬ÄÇôָ¶¨µÄ¼¶Áª²Ù ......