34.1. Æ®¸®°Å µ¿ÀÛ ¹æ½Ä¿¡ ´ëÇÑ ¼Ò°³

Æ®¸®°Å¶õ µ¥ÀÌÅͺ£À̽º ÀÌ·Ð °¡¿îµ¥ ÇÑ °³³äÀÌ´Ù. Æ®¸®°Å´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ¾î¶² ¸í·ÉÀÌ ½ÇÇà µÇ±âÀü, ¶Ç´Â µÈ ÈÄ¿¡ ÀÚµ¿À¸·Î ÁöÁ¤ÇÑ ÇÔ¼ö°¡ ½ÇÇàµÇµµ·Ï ÇÏ´Â ±â´ÉÀÌ´Ù. ±× ¸í·ÉÀº INSERT, UPDATE, DELETE À̸ç, ±× ´ë»óÀÌ ±× ¸í·É Àüü¿¡ µü ÇÑ ¹ø¸¸ ¼öÇàµÉ ¼öµµ ÀÖ°í, Àû¿ëµÇ´Â °¢°¢ÀÇ ·Î¿ì ´ÜÀ§·Î ¼öÇàµÉ ¼öµµ ÀÖ´Ù. Æ®¸®°Å À̺¥Æ®°¡ ¹ß»ýÇϸé, ÁöÁ¤ÇÑ Æ¯Á¤ Æ®¸®°Å ÇÔ¼ö°¡ ÁöÁ¤ÇÑ »óȲ¿¡¼­ ½ÇÇàµÈ´Ù.

Æ®¸®°Å ±â´ÉÀ» »ç¿ëÇÏ·Á¸é, ¸ÕÀú Æ®¸®°Å ÇÔ¼ö¸¦ ¸ÕÀú ¸¸µé¾î¾ßÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ´Â ¾øÀ¸¸ç, ¸®ÅÏ ÀÚ·áÇüÀº trigger¿©¾ßÇÑ´Ù. (ÀÎÀÚ¸¦ ³Ñ°ÜÁÖ¾î¾ßÇÒ °æ¿ì´Â ³»ºÎÀûÀ¸·Î ¹Ì¸® Á¤ÀÇµÈ TriggerData ±¸Á¶Ã¼¿¡ ´ã°ÜÁö±â ¶§¹®¿¡ ±×°ÍÀ» »ç¿ëÇÑ´Ù. - °¢ ÇÁ·Î½ÃÁ® ¾ð¾îº°·Î ÀÌ°ÍÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¸í½ÃÇÏ°í ÀÖ´Ù. - ¿Å±äÀÌ Ãß°¡) )

¸ÕÀú Æ®¸®°Å ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù¸é, ÀÌ Æ®¸®°Å ÇÔ¼ö´Â CREATE TRIGGER ¸í·ÉÀ¸·Î Æ®¸®°Å ±â´ÉÀ» »ç¿ëÇϵµ·Ï ÇÑ´Ù. ÇϳªÀÇ Æ®¸®°Å ÇÔ¼ö´Â ¿©·¯°³ÀÇ ´Ù¸¥ Æ®¸®°Å·Î »ç¿ëµÉ ¼öµµ ÀÖ´Ù.

PostgreSQL¿¡¼­´Â ·Î¿ì ´ÜÀ§ (ROW) Æ®¸®°Å¿Í ¸í·É ´ÜÀ§ (STATEMENT) Æ®¸®°Å ¸ðµÎ Áö¿øÇÑ´Ù. ·Î¿ì ´ÜÀ§´Â Æ®¸®°Å ÀÛ¾÷À» ÁøÇàÇÒ ¶§, Àû¿ëµÇ´Â °¢ ·Î¿ì ÀÛ¾÷ÀÌ ÀÖÀ» ¶§ ¸¶´Ù Æ®¸®°Å ÇÔ¼ö°¡ ½ÇÇàµÇ¸ç, ¸í·É ´ÜÀ§´Â Æ®¸®°Å ÇÔ¼ö°¡ ÇϳªÀÇ ¸í·ÉÀÌ ¼öÇàµÉ ¶§ ¸¶´Ù ½ÇÇàµÈ´Ù. Ưº°È÷, Àû¿ëµÇ´Â ·Î¿ì°¡ ÇÑ °Çµµ ¾øÀ» °æ¿ì¶óµµ ¸í·É ´ÜÀ§ Æ®¸®°ÅÀÇ °æ¿ì´Â ±× Æ®¸®°Å ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. ÀÌ µÎ ÇüÅÂÀÇ Æ®¸®°Å¸¦ ·Î¿ì Â÷¿ø Æ®¸®°Å, ¸í·É Â÷¿ø Æ®¸®°Å¶óµµ ºÒ¸°´Ù.

Æ®·¯±â´Â ±× ½ÇÇàµÇ´Â ¼ø¼­¿¡ µû¶ó¼­ ¼±Ã³¸® (BEFORE) Æ®¸®°Å¿Í ÈÄó¸® (AFTER) Æ®¸®°Å·Î ±¸ºÐµÈ´Ù. ¸í·É ´ÜÀ§ ¼±Ã³¸® Æ®¸®°ÅÀÇ °æ¿ì´Â ±× Æ®¸®°Å ÀÛ¾÷À» ÇؾßÇÒ »óȲÀÌ ¹ß»ýµÇ¾úÀ» ¶§, ¸ðµç ÀÛ¾÷¿¡ ¾Õ¼­ ±× Æ®¸®°Å ÇÔ¼ö°¡ Á¦ÀÏ ¸ÕÀú ½ÇÇàµÇ¸ç, ¸í·É ´ÜÀ§ ÈÄó¸® Æ®¸®°Å´Â ±× Æ®¸®°Å ÀÛ¾÷À» ½ÇÇàÇÒ ¸ðµç ¸í·ÉÀÇ ÀÛ¾÷ÀÌ ³¡³µÀ» ¶§ ¸¶Áö¸·¿¡ ½ÇÇàµÈ´Ù. ¹Ý¸é, ·Î¿ì ´ÜÀ§ ¼±Ã³¸® Æ®¸®°Å´Â ÇØ´ç ·Î¿ì ÀÛ¾÷À» ÇϱâÀü¿¡, ·Î¿ì ´ÜÀ§ ÈÄó¸® Æ®¸®°Å´Â ÇØ´ç ·Î¿ì ÀÛ¾÷À» ÇÑ µÚ¿¡ °¢°¢ ¹Ýº¹Çؼ­ ½ÇÇàµÈ´Ù. (¹°·Ð, ÀÛ¾÷ µµÁß ¿©·¯°³ÀÇ Æ®¸®°Å°¡ ÇÔ²² ½ÇÇàµÉ °æ¿ì, °¡Àå ¸¶Áö¸·¿¡ ½ÇÇàµÇ´Â Æ®¸®°Å´Â ¸í·É ´ÜÀ§ ÈÄó¸® Æ®¸®°Å°¡ µÈ´Ù.)

¸í·É ´ÜÀ§ Æ®¸®°Å¿¡ »ç¿ëµÉ Æ®¸®°Å ÇÔ¼ö´Â ¹Ýµå½Ã NULL °ªÀ» ¸®ÅÏÇؾßÇÑ´Ù. ·Î¿ì ´ÜÀ§ Æ®¸®°Å¿¡ »ç¿ëµÉ Æ®¸®°Å ÇÔ¼ö´Â ÇØ´ç Å×À̺íÀÇ ·Î¿ì¸¦ ¸®ÅÏÇÑ´Ù. (ÀÌ°ÍÀÇ ÀÚ·áÇüÀº HeapTupleÀÌ´Ù.) ÀÌ ÀÚ·áÇüÀÇ ±¸Ã¼ÀûÀ¸·Î ´ÙÀ½°ú °°Àº °ªµéÀ» °¡Áø´Ù.

ÀÌó·³ ·Î¿ì ´ÜÀ§ Àüó¸® Æ®¸®°Å´Â ÁÖÀǸ¦ ±â¿ì¸®Áö ¾ÊÀ¸¸é, ÀǵµµÇÁö ¾Ê°Ô »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ÀÚ·á °ªÀÌ ¾Æ´Ñ ´Ù¸¥ ÀÚ·á·Î ¹Ù²î¾î ó¸® µÉ ¼ö ÀÖ´Ù. (ÀϹÝÀûÀ¸·Î Æ®¸®°Å ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â ÀÌ ÇØ´ç ·Î¿ì´Â INSERT, UPDATE ÀÏ °æ¿ì´Â NEW, DELETE ÀÏ °æ¿ì´Â OLD¶ó´Â À̸§À» »ç¿ëÇÑ´Ù.)

·Î¿ì ´ÜÀ§ ÈÄó¸® Æ®¸®°Å¿¡¼­ È£ÃâµÇ´Â Æ®¸®°Å ÇÔ¼öÀÇ ¸®ÅÏ°ªÀº ¹«½ÃµÈ´Ù. µû¶ó¼­ NULL °ªÀ» »ç¿ëÇÏ´Â °ÍÀ̳ª ¸¶Âù°¡Áö´Ù.

ÇϳªÀÇ ¸±·¹À̼ǿ¡ ¿©·¯°³ÀÇ Æ®¸®°Å¸¦ ÁöÁ¤ÇßÀ» °æ¿ì´Â ±× Æ®¸®°ÅÀÇ À̸§¼ø(¾ËÆĺª¼ø)À¸·Î ½ÇÇàµÈ´Ù. Àüó¸® Æ®¸®°ÅÀÏ °æ¿ì´Â ¾Õ¼± Æ®¸®°Å¿¡¼­ ÀÌ¹Ì ÇØ´ç ·Î¿ì°¡ º¯°æ µÇ¾ú´Ù¸é, ±× º¯°æµÈ ·Î¿ì°¡ ¸®ÅÏµÇ¾î ´ÙÀ½ Æ®¸®°Å¿¡¼­ »ç¿ëµÈ´Ù. ÇÑÆí, ÀÛ¾÷ µµÁß ¾î¶² Æ®¸®°Å ÇÔ¼ö°¡ NULL °ªÀ» ¸®ÅÏÇß´Ù¸é, ±× ÀÌÇÏ ¸ðµç Æ®¸®°Å ÇÔ¼ö ÀÛ¾÷Àº ÁßÁöµÈ´Ù.

ÀüÇüÀûÀ¸·Î, ·Î¿ì ´ÜÀ§ Àüó¸® Æ®¸®°Å´Â ÀڷḦ »ðÀÔÇϰųª, °»½Å ÇÒ ¶§, ±× ÀÚ·áÀÇ À¯È¿¼ºÀ» °Ë»çÇϴµ¥ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î¼­, timestamp Ä®·³¿¡ »ç¿ëÀÚ°¡ ºñ·Ï ´Ù¸¥ ½Ã°£°ªÀ» ÀÔ·ÂÇÏ´õ¶óµµ ¹«Á¶°Ç ÇöÀç ½Ã°£À¸·Î ÀúÀåÇϵµ·Ï ÇÑ´ÙµçÁö, µÎ°³ÀÇ Ç׸ñÀÌ ¼­·Î ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ÇÑÆí, ·Î¿ì ´ÜÀ§ ÈÄó¸® Æ®¸®°Å´Â ÇØ´ç ÀÛ¾÷ µÚ¿¡ ÀÌ·ç¿öÁö´Â ±× ÀڷḦ ¹ÙÅÁÀ¸·Î ´Ù¸¥ Å×À̺íÀÇ ÀڷḦ Á¶ÀÛÇؾßÇÒ °æ¿ì¿¡ »ç¿ëµÈ´Ù. ÀÌ·¸°Ô ±¸ºÐÇؼ­ »ç¿ëÇÏ´Â ÀÌÀ¯´Â ÈÄó¸® Æ®¸®°Å¸¦ ¾µ °æ¿ì´Â ±× ÇØ´ç ÀÚ·á°¡ ÀÌ¹Ì ¹Ý¿µµÇ¾ú´Ù´Â °Í - ±×·¸°Ô ÀÚ·á·Î ÀúÀåµÉ °ÍÀÌ´Ù´Â °ÍÀÌ È®Á¤ÀÌ ³­ »óÅÂÀ̳ª, Àüó¸® Æ®¸®°ÅÀÏ °æ¿ì´Â ±×·¸Áö ¾Ê±â ¶§¹®ÀÌ´Ù. Áï, ´Ù¸¥ Æ®¸®°Å¿¡ ÀÇÇؼ­ ¾ðÁ¦µçÁö ±× ÀÚ·á°¡ º¯°æµÉ °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÌ´Ù. Àüó¸® Æ®¸®°Å¸¦ ½á¾ßÇÒÁö, ÈÄó¸® Æ®¸®°Å¸¦ ½á¾ßÇÒÁö¸¦ ¸ð¸£°Ú´Ù¸é, ÀÏ´Ü, Àüó¸® Æ®¸®°Å¸¦ ¾²´Â °ÍÀÌ º¸´Ù È¿°úÀûÀÌ´Ù. ¿Ö³ÄÇϸé, ÀڷḦ ¼öÁ¤ÇؾßÇÒ °æ¿ì°¡ »ý°åÀ» °æ¿ì Æ®¸®°Å ÇÔ¼ö º¯°æ ¸¸À¸·Î ¿øÇÏ´Â °á°ú¸¦ ¸¸µé¾î ³¾ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Æ®¸®°Å ÇÔ¼ö ¾È¿¡¼­ SQL ¸í·ÉÀ» ¼öÇàÇÒ °æ¿ì, ±× ÀÛ¾÷À¸·Î ÀÎÇØ ¶Ç ´Ù¸¥ Æ®¸®°Å ÇÔ¼ö°¡ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ÀÌ°ÍÀ» µ¢´Þ¾Æ ½ÇÇàµÇ´Â Æ®¸®°Å¶ó°í ÇÑ´Ù (cascading trigger). ÇöÀç´Â ÀÌ µ¢´Þ¾Æ ½ÇÇàµÇ´Â Ƚ¼öÀÇ Á¦ÇÑÀÌ ¾ø´Ù. ÀÌ °æ¿ì, °°Àº Æ®¸®°Å ÇÔ¼ö°¡ Àç±ÍÈ£ÃâµÇ´Â °æ¿ì¸¦ ¹ß»ý½Ãų ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î¼­, INSERT ÀÛ¾÷¿¡¼­ ÇÑ Æ®¸®°Å ÇÔ¼ö°¡ ½ÇÇàµÇ°í ±×°ÍÀÌ ¶Ç ´Ù½Ã INSERT ÀÛ¾÷À» ÁøÇàÇϸ鼭 °°Àº ÇÔ¼ö¸¦ È£Ãâ ÇÏ´Â °æ¿ì´Ù. ÀÌ·± ¹®Á¦´Â Æ®¸®°Å ÇÔ¼ö¿Í ±× Æ®¸®°Å¸¦ ÁöÁ¤ÇÏ´Â ÇÁ·Î±×·¡¸ÓÀÇ Ã¥ÀÓÀ¸·Î ³²°ÜµÐ´Ù.

Æ®¸®°Å ÇÔ¼ö¸¦ ¸¸µé ¶§´Â ÀÎÀÚ¸¦ ¾µ ¼ö ¾øÁö¸¸, Æ®¸®°Å¸¦ ÁöÁ¤ÇÒ ¶§´Â ±× Æ®¸®°Å ÇÔ¼ö°¡ »ç¿ëÇÒ ÀÎÀÚ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ÇÏ¸é ºñ½ÁÇÑ ÀÛ¾÷À» ÇÏ´Â °¢°¢ÀÇ Æ®¸®°Å°¡ ÇϳªÀÇ Æ®¸®°Å ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ Æ®¸®°Å ÇÔ¼ö¿¡¼­ µÎ °³ÀÇ ÀÎÀÚ¸¦ ¹Þ¾Æ¼­, °¢°¢ »ç¿ëÀÚ À̸§, ÇöÀç ½Ã°£À» ±â·ÏÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù°í ÇßÀ» ¶§, ¿©·¯ Å×ÀÌºí¿¡¼­ ±× Å×ÀÌºí¿¡ »ç¿ëÇÏ´Â »ç¿ëÀÚ À̸§ Ä®·³°ú ½Ã°£ Ä®·³À» Æ®¸®°ÅÀÇ ÀÎÀÚ·Î ÁöÁ¤ÇØ µÎ¸é, ¿©·¯°³ÀÇ Å×ÀÌºí¿¡¼­ °°Àº Æ®¸®°Å ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ·¸°Ô ÇÑ´Ù¸é, INSERT ÀÛ¾÷ÀÏ °æ¿ì´Â ÀÛ¾÷ ³»¿ªÀ» ÃßÀûÇÒ ¼ö ÀÖÀ» °ÍÀ̸ç, UPDATE ÀÛ¾÷ÀÏ °æ¿ì´Â ¸¶Áö¸· °»½ÅÀÚ¸¦ ÃßÀûÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

Æ®¸®°Å¸¦ Áö¿øÇÏ´Â °¢°¢ÀÇ ÇÁ·Î½ÃÁ® ¾ð¾îµéÀº Æ®¸®°Å ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ Æ®¸®°Å ÀÔ·Â ÀڷḦ ¸¸µå´Â ¹æ¹ýÀ» Á¦°øÇÕ´Ï´Ù. Æ®¸®°Å ÀÔ·Â ÀÚ·á¶õ INSERT, UPDATE ¸í·É¿¡¼­ »ç¿ëÇÏ´Â ±× ÇØ´ç ·Î¿ì¸¦ ¶æÇÕ´Ï´Ù. ·Î¿ì ´ÜÀ§ Æ®¸®°Å¿¡¼­´Â INSERT, UPDATE ¸í·É¿¡¼­ »ç¿ëÇÏ´Â NEW ·Î¿ì¸¦, UPDATE, DELETE ¸í·É¿¡¼­´Â OLD ·Î¿ì¸¦ »ç¿ëÇÕ´Ï´Ù. ÇöÀç, ¸í·É ´ÜÀ§ Æ®¸®°Å¿¡¼­´Â ±× ÀÛ¾÷ ´ë»óÀÌ µÇ´Â ·Î¿ì¸¦ ´Ù·ç´Â º¯¼ö°¡ ¾ø½À´Ï´Ù.