Oracle/MySQL °ü·Ã °Ô½ÃÆÇ |
---|
2002/08/06(19:27) from 61.80.99.240 | |
ÀÛ¼ºÀÚ : °ÁÙ±â (jkkang65@hanmail.net) | Á¶È¸¼ö : 6178 , ÁÙ¼ö : 440 |
Re: [MySQL] SQL Ç¥ÁØ È£È¯¼º |
---|
Á¦ ¸ñ:[¹ø¿ª/mysql]5. SQL Ç¥ÁØ È£È¯¼º °ü·ÃÀÚ·á:¾øÀ½ [167] º¸³½ÀÌ:¹®ÅÂÁØ (taejun ) 1999-02-05 01:23 Á¶È¸:1082 ¹ø¿ªÀÚ : ¹®ÅÂÁØ(taejun@hitel.net) ** Ç¥½Ã´Â ¿ªÀÚÀÇ ÁÖÀÓ. --> ´ÙÀ½Àº 6Àå Á¢±Ù Á¦¾î ½Ã½ºÅÛÀ̳ª 15Àå ODBC ºÎºÐÀ» ¹ø¿ªÇÒ ¿¹Á¤ÀÔ ´Ï´Ù. ¹ø¿ª ÀÚü´Â ¸¹ÀÌ ÇÏÁö ¾Ê¾ÒÁö¸¸ Áß¿äÇÑ ºÎºÐÀº ¾î´ÀÁ¤µµ ´Ù·ç¾ú´Ù °í »ý°¢ÀÌ µÇ³×¿ä. isamchk »ç¿ëÇÏ´Â ¹æ¹ý°ú ¿©·¯ °¡Áö ¹®Á¦¿¡ ´ëóÇÏ´Â ¹æ¹ýµµ Áß¿äÇϰÚÁö¿ä. ±×·¸Áö¸¸ SQL ¹®°ú API ºÎºÐÀº °£´ÜÇÏ°Ô »ç¿ë¹æ¹ý ³ª¿À´Â °ÍÀ̴ϱñ ±×³É ¸Å´º¾ó·Î ºÁµµ ±×¸® ºÒÆíÇÏÁö´Â ¾ÊÀ» µí... ¾Æ ¹«Áö Á¹¸®´Ù. ¿ä»õ´Â ½Ã°£ÀÌ ¾ø¾î¼ ÇÏ·ç¿¡ µÎ¼¼ÆäÀÌÁö¾¿ ÇÏ°í ³Ñ¾î°¡ ´Â±º¿ä. --------------------------------------------------------------------- 5. mysqlÀÇ Ç¥ÁØ È£È¯¼º 5.1 mysqlÀÇ ANSI SQL92 È®ÀåºÎºÐ mysql¿¡´Â ´Ù¸¥ sql µ¥ÀÌÅͺ£À̽º¿¡¼ ãÀ» ¼ö ¾ø´Â È®ÀåµÈ ºÎºÐÀÌ ÀÖ´Ù. ÀÌ·± ºÎºÐÀ» »ç¿ëÇÏ´Â °æ¿ì ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¿Ö³Ä¸é mysql¿¡¼ »ç¿ëÇÑ ÄÚµå °¡ ´Ù¸¥ SQL ¼¹ö¿¡ Æ÷ÆÃÇÒ ¼ö ¾øÀ» ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ¾î¶² °æ¿ì¿¡´Â /*! ... */ Çü½ÄÀÇ ÁÖ¼®¹®À» »ç¿ëÇÑ MYSQL È®ÀåÀ» ÀÌ¿ëÇØ Æ÷ÆÃ°¡´ÉÇÑ ÄÚ µå¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾îº¸ÀÚ: SELECT /*! STRAIGHT_JOIN */ col_name from table1,table2 WHERE ... MYSQLÀÇ È®Àå ºÎºÐÀº ´ÙÀ½°ú °°´Ù: - ÇʵåŸÀÔ MEDIUMINT, SET, ENUM , ±×¸®°í ´Ù¸¥ BLOB ¿Í TEXT ŸÀÔ. - Çʵå¼Ó¼º AUTO_INCREMENT, BINARY, UNSIGNED and ZEROFILL. - ¸ðµç ¹®ÀÚ¿ ºñ±³´Â ±âº»ÀûÀ¸·Î ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾ÊÀ¸¸ç ÇöÀçÀÇ ¹® ÀÚ¼Â(±âº»ÀûÀ¸·Î ISO-8859-1 Latin1)¿¡ ÀÇÇØ Á¤·Ä ¼ø¼°¡ °áÁ¤µÈ´Ù. ÀÌ°Í À» ¿øÇÏÁö ¾ÊÀ¸¸é Ä÷³À» BINARY ¼Ó¼ºÀ¸·Î Á¤ÀÇÇØ¾ß Çϸç ÀÌ·± °æ¿ì¿¡´Â mysql ¼¹ö È£½ºÆ®°¡ »ç¿ëÇÏ´Â ASCII ¼ø¼¿¡ µû¶ó ¹®ÀÚ¿À» ºñ±³ÇÑ´Ù. - MYSQLÀº µ¥ÀÌÅͺ£À̽º¸¦ µð·ºÅ丮·Î ¸¸µé°í Å×À̺íÀº ÆÄÀÏÀ̸§À¸·Î ¸¸µç´Ù. À̰ÍÀº µÎ°¡Áö¸¦ ÇÔÃàÇϰí ÀÖ´Ù: ¤· ÆÄÀÏÀ̸§ÀÇ ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â (´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ. ¸®´ª½º µµ ¸¶Âù°¡Áö°ÚÁö¿ë~) ¿î¿µ ½Ã½ºÅÛ¿¡¼´Â MYSQLÀÇ µ¥ÀÌÅͺ£À̽º ÀÌ ¸§°ú Å×À̺í À̸§Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÑ´Ù. Å×À̺í À̸§À» ±â¾ïÇϴµ¥ ¹®Á¦°¡ ÀÖ´Ù¸é ¸ðµç °ÍÀ» ¼Ò¹®ÀÚ·Î ¸¸µéÀÚ. ¤· Å×À̺íÀÇ ¹é¾÷, À̸§¹Ù²Ù±â, ¿Å±â±â, »èÁ¦, º¹»ç¸¦ À§ÇØ Ç¥ÁØ ½Ã½ºÅÛ ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î Å×À̺íÀÇ À̸§À» ¹Ù²Ù·Á¸é ÇØ´çÇÏ ´Â Å×À̺íÀÇ `.ISD', `.ISM' and `.frm' ÆÄÀÏÀÇ À̸§À» ¹Ù²Ù¸é µÈ´Ù. - SQL¹®¿¡¼ db_name.tbl_name ¹®À» ÀÌ¿ëÇÏ¿© ´Ù¸¥ µ¥ÀÌÅͺ£À̽ºÀÇ Å×ÀÌ ºí¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀϺΠSQL ¼¹ö´Â °°Àº ±â´ÉÀ» Áö¿øÇÏÁö¸¸ À̰ÍÀ» User space¶ó°í ºÎ¸¥´Ù. MYSQLÀº ´ÙÀ½°ú °°Àº TABLESPACES¸¦ Áö¿ø ÇÏÁö ¾Ê´Â´Ù : create table ralph.my_table...IN my_tablespace. - ¼öÄ¡(¼ýÀÚÇü) Ä÷³¿¡¼ LIKE¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. - SELECT¹®¿¡¼ INTO OUTFILE °ú STRAIGHT_JOIN À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. 7.11 [SELECT] Âü°í. -EXPLIAN SELECT´Â Å×ÀÌºí¿¡¼ ¾î¶»°Ô Á¶ÀÎÀÌ µÇ¾ú´ÂÁö¿¡ ´ëÇÑ Á¤º¸ ¸¦ º¸¿©ÁØ´Ù. - Use of index names, indexes on a subpart of a field, and use of INDEX or KEY in a CREATE TABLE statement. 7.6 [CREATE TABLE] Âü°í. - ALTER TABLE¿¡¼ CHANGE col_name, DROP col_name ¶Ç´Â DROP INDEX ¸¦ »ç¿ëÇÑ´Ù. 7.7 [ALTER TABLE] Âü°í. - ALTER TABLE ¹®¿¡¼ IGNORE »ç¿ë. - ALTER TABLE ¹®¿¡¼ ´ÙÁß ADD, ALTER, DROP or CHANGE »ç¿ë - IF EXISTS Ű¿öµå¸¦ ÀÌ¿ëÇÑ DROP TABLE »ç¿ë. - ÇÑ Å×À̺í À̻󿡼 DROP TABLE »ç¿ë. - LOAD DATA INFILE »ç¿ë. ´ëºÎºÐÀÇ °æ¿ì ÀÌ ¹®ÀåÀº ¿À¶óŬÀÇ LOAD DATA INFILE°ú ȣȯµÈ´Ù. 7.15 [LOAD DATA INFILE] Âü°í. (** ¸¹Àº ¾çÀÇ µ¥ÀÌÅ͸¦ ÇѲ¨¹ø¿¡ ÀÔ·ÂÇÒ ¶§ ÀÏÀÏÀÌ INSERT ¹®À» ÇÏ´Â °Íº¸´Ù ¼Óµµ°¡ ºü¸£´Ù. **) - OPTIMIZE TABLE ¹® »ç¿ë. - ¹®ÀÚ¿Àº ''' ¸¸ÀÌ ¾Æ´Ï¶ó '"' ¶Ç´Â ''' ·Î ´ÝÀ» ¼ö ÀÖ´Ù. - escape `\' ¹®ÀÚ »ç¿ë. - SET OPTION ¹®. 7.24 [SET OPTION] Âü°í. - GROUP BY ºÎºÐ¿¡¼ ¸ðµç Ä÷³À» »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù. ÀÌ·¯ÇÑ ±â´ÉÀº ÀϹÝÀûÀÎ ÁúÀǰ¡ ¾Æ´Ñ ƯÁ¤ÇÑ ÁúÀÇ¿¡¼ ¼º´ÉÀ» Çâ»ó½ÃŲ´Ù. 7.3.12 [GROUP BY Functions] Âü°í. (** ANSI SQL¿¡¼´Â ¿©·¯ Å×ÀÔ¹ÉÀ» ÀÌ¿ëÇÏ¿© GROUP BY¸¦ »ç¿ëÇÒ ¶§ »ç¿ëÇϰíÀÚ ÇÏ´Â ¸ðµç Ä÷³¿¡ GROUP BY¸¦ ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô µÇ´Â °æ¿ì ºÒÇÊ¿äÇÑ ¿¬»êÀÌ ¼öÇàµÉ ¼ö Àִµ¥ MYSQL¿¡¼´Â ÀÌ·¯ÇÑ °ÍÀ» ¾ø¾Ø °ÍÀÌ´Ù. 7.3.12¸¦ Âü°íÇÑ´Ù **) - ´Ù¸¥ SQL ȯ°æÀ» »ç¿ëÇß´ø »ç¿ëÀÚ¸¦ À§ÇØ MYSQLÀº ¸¹Àº ±â´É¿¡¼ ¾Ë ¸®¾Æ½º¸¦ Áö¿øÇÑ´Ù. ¿¹¸¦ µé¾î ¸ðµç ¹®ÀÚ Æã¼ÇÀº ANSI SQL °ú ODBC ±¸ ¹®À» Áö¿øÇÑ´Ù. - MYSQLÀº C ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í °°Àº ³í¸®ÀûÀÎ OR °ú AND¸¦ ÀǹÌÇÏ ´Â || ¿Í && ¸¦ ÀνÄÇÑ´Ù. MYSQL¿¡¼´Â || ¿Í OR ´Â °°Àº ¸»À̸ç && ¿Í AND µµ ¸¶Âù°¡ÁöÀÌ´Ù. ÀÌ·¯ÇÑ ¹Ì¹¦ÇÑ ±¸¹®¶§¹®¿¡ MYSQLÀº string concatenation(¹®ÀÚ¿ ¿¬°ü, ¿¬°á?)À» À§ÇÑ ANSI SQL ¿ÀÆÛ·¹ÀÌÅÍÀÎ || À» Áö¿øÇÏÁö ¾Ê´Â´Ù. ´ë½Å CONCAT()¸¦ »ç¿ëÇÑ´Ù. CONCAT() ´Â ¸¹Àº ÀÎÀÚ °¡ ÀÖ¾î¼ MYSQL ¿¡¼ || ¿ÀÆÛ·¹ÀÌÅÍÀÇ »ç¿ëÀ» º¯È¯Çϱ⠽±´Ù. MySQL understands the || and && operators to mean logical OR and AND, as in the C programming language. In MySQL, || and OR are synonyms, as are && and AND. Because of this nice syntax, MySQL doesn't support the ANSI SQL operator || for string concatenation; use CONCAT() instead. Since CONCAT() takes any number of arguments, it's easy to convert use of the || operator to MySQL. - Æ÷ÆÃÀÌ °¡´ÉÇϵµ·Ï SQL CODE¿¡¼ STRAIGHT_JOIN°°Àº MYSQL¸¸ ÀÇ Å°¿öµå »ç¿ëÀ» Áö¿øÇϱâ À§ÇØ ÀÌ·± Ű¿öµå¸¦ /* */ ÁÖ¼®¾È¿¡ ³»ÀåÇÒ ¼ö ÀÖ´Ù. ÁÖ¼®¹®¾ÈÀÇ ³»¿ëÀº '!' ·Î ½ÃÀÛÇÑ´Ù. ÀÌ·± °æ¿ì MYSQL¿¡¼´Â ÁÖ¼® ¹®À» ´Ù¸¥ MYSQL ±¸¹®°ú °°ÀÌ ÇØ¼®ÇÏÁö¸¸ ´Ù¸¥ SQL ¼¹ö¿¡¼´Â ÀÌ·¯ÇÑ È®Àå±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê°í °Ç³Ê¶é ¼ö ÀÖ´Ù. ¿¹¸¦ º¸ÀÚ: SELECT /*! STRAIGHT_JOIN */ * from table1,table2 WHERE ... - ´ÙÀ½ÀÇ ±â´ÉÀ̳ª ¸í·É »ç¿ë: ¤· CREATE DATABASE or DROP DATABASE. 7.4 [CREATE DATABASE] Âü°í. ¤· MOD() ´ë½Å¿¡ % »ç¿ë. %´Â C ÇÁ·Î±×·¡¸Ó¸¦ À§ÇØ Áö¿øÇÏ¸ç ¶ÇÇÑ PostgresSQL°úÀÇ È£È¯¼ºÀ» À§ÇØ Áö¿øÇÑ´Ù. ¤· Ä÷³ ¹®¿¡¼ =, <>, <= ,<, >=,>, <<, >>, AND, OR, LIKE »ç¿ë. ¤· LAST_INSERT_ID(). 18.4.49 [mysql_insert_id()] Âü°í. ¤· REGEXP or NOT REGEXP. ¤· Çϳª³ª Çϳª ÀÌ»óÀÇ ÀÎÀÚ¸¦ »ç¿ëÇÑ CONCAT() ³ª CHAR(). MYSQL¿¡¼ ÀÌ·¯ÇÑ Æã¼ÇÀº ¿©·¯°³ÀÇ ÀÎÀÚ¸¦ °¡Áú ¼ö ÀÖ´Ù. ¤· BIT_COUNT(), ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), or WEEKDAY(). ¤· ¼ºê½ºÆ®¸µÀ» ¾ø¾Ö´Â µ¥ TRIM() »ç¿ë.(Use of TRIM() to trim substrings) ANSI SQL ¿¡¼´Â ´ÜÀÏ ¹®ÀÚ Á¦°Å¸¸ Áö¿øÇÑ´Ù. (** ²¨¾î¾ï~ Æ®¸²ÀÌ ¼ú¸Ô°í ÇÏ´Â Æ®¸²Àº ¾Æ´Ï¶ø´Ï´Ù... **) ¤· ±×·ì Æã¼Ç¿¡¼ STD(), BIT_OR() and BIT_AND() ¤· DELET + INSERT ´ë½Å REPLACE »ç¿ë. 7.14 [REPLACE] Âü°í. ¤· FLUSH flush_option ¸í·É. 5.2 MYSQL¿¡¼ ºüÁø ±â´É ´ÙÀ½ÀÇ ±â´ÉµéÀº ÇöÀç ¹öÀüÀÇ MYSQL¿¡ ºüÁ®ÀÖ´Ù. ´ÙÀ½ ¹öÀü¿¡¼ÀÇ ¿ì¼± ±ÇÀ» È®ÀÎÇ϶ó¸é MYSQL TODO ¸ñ·ÏÀ» Âü°íÇÏÀÚ (http://www.mysql.com/Manual_split/manual_Todo.html). À̰ÍÀÌ °¡Àå ÃÖ ½Å ¹öÀüÀÇ TODO ¸ñ·ÏÀÌ´Ù. ºÎ·Ï F [TODO] Âü°í. 5.2.1 Sub-selects ´ÙÀ½Àº Mysql¿¡¼ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù: SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); Mysql¿¡¼´Â ¿ÀÁ÷ INSERT ... SELECT ... and REPLACE ... SELECT ... ¸¸À» Áö¿øÇÑ´Ù. µ¶¸³ÀûÀÎ ¼ºê-select ¹®Àº 3.23.0¿¡¼ ¾Æ¸¶µµ »ç¿ëÇÒ ¼ö ÀÖ À» °ÍÀÌ´Ù. ±×´ë½Å ÇöÀç IN() Æã¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. 5.2.2 SELECT INTO TABLE MysqlÀº ¾ÆÁ÷ SELECT ... INTO TABLE ....À» Áö¿øÇÏÁö ¾Ê´Â´Ù. ÇöÀç, MysqlÀº ¿ÀÁ÷ SELECT ... INTO OUTFILE ..., ¸¸À» Áö¿øÇÏ¸ç ±âº»ÀûÀ¸·Î ´Â µ¿ÀÏÇÏ´Ù. 5.2.3 Æ®·£Àè¼Ç(Transactions) Æ®·£Àè¼ÇÀº Áö¿øµÇÁö ¾Ê´Â´Ù. MysqlÀº °ð atomic(¿øÀÚ¼º?) ¿ÀÆÛ·¹À̼ÇÀ» Áö¿øÇÒ °ÍÀ̸ç atomic ¿ÀÆÛ·¹À̼ÇÀº rollbackÀÌ ¾ø´Â Æ®·£Àè¼Ç°ú ºñ½ÁÇÏ´Ù. atomic ¿ÀÆÛ·¹À̼ÇÀ» »ç¿ëÇϸç insert/select/¸ðµç ¸í·ÉÀÇ ±×·ìÀ» ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸ç ¾î¶² ½º·¹µåµµ Ãæµ¹ÇÏÁö ¾ÊÀ» ¼ö ÀÖµµ·Ï º¸ÀåÇØÁØ´Ù. ÀÌ ¹®¸Æ¿¡¼ ÀϹÝÀûÀ¸·Î ·Ñ¹é(rollback)Àº ÇÊ¿ä¾ø´Ù. ÇöÀç LOCK TABLES ¿Í UNLOCK TABLES ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ´Ù¸¥ ½º·¹µå°¡ Ãæµ¹ÇÏ´Â °ÍÀ» ¸·À» ¼ö ÀÖ´Ù. 7.23 [Lock Tables] Âü°í. 5.2.4 ÀúÀå ÇÁ·Î½ÃÀú¿Í Æ®¸®°Å ÀúÀå ÇÁ·Î½ÃÀú´Â ¼¹ö¿¡¼ ÄÄÆÄÀϵǰí ÀúÀåµÉ ¼ö ÀÖ´Â SQL ¸í·É ¼¼Æ®ÀÌ ´Ù. ÀÌ·± ±â´ÉÀÌ ¼öÇàµÇ¸é Ŭ¶óÀÌ¾ðÆ®´Â Àüü ÁúÀǸ¦ ´Ù½Ã ÇÒ Çʿ䰡 ¾ø°í ¶ÇÇÑ ÀúÀå ÇÁ·Î½ÃÀú¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ±â´ÉÀÌ ÀÖÀ¸¸é ÁúÀÇ´Â Çѹø¸¸ ÇØ¼®µÇ°í ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°£ÀÇ ÁÖ°í¹Þ¾Æ¾ß ÇÏ´Â µ¥ÀÌÅͰ¡ ÁÙ¾îµé¹Ç·Î ¼Ó µµ°¡ Çâ»óµÈ´Ù. ¶ÇÇÑ ¼¹öÀÇ Æã¼Ç ¶óÀ̺귯¸®¸¦ °¡ÁüÀ¸·Î¼ °³³äÀûÀÎ ´Ü°è ¸¦ Çâ»ó½Ãų ¼ö ÀÖ´Ù. (??? You can also raise the conceptual level by having libraries of functions in the server.) Æ®¸®°Å´Â Ưº°ÇÑ À̺¥Æ®°¡ ¹ß»ýÇßÀ» ¶§ »ý±â´Â ÀúÀå ÇÁ·Î½ÃÁ®ÀÌ´Ù. ¿¹¸¦ µé¾î Æ®·£Àè¼Ç Å×ÀÌºí¿¡¼ ·¹Äڵ尡 »èÁ¦µÇ°í ¸ðµç Æ®·£Àè¼ÇÀÌ Áö¿öÁú ¶§ »óÀÀÇÏ´Â Å×À̺íÀ» »èÁ¦ÇÒ ¼ö ÀÖ´Â ÀúÀå ÇÁ·Î½ÃÀú¸¦ ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î´Â ÀúÀå ÇÁ·Î½ÃÀú¸¦ Áö¿øÇÒ ¿¹Á¤ÀÌÁö¸¸ Æ®¸®°Å´Â ¾Æ´Ï´Ù. Æ®¸®°Å´Â ÇÊ¿äÇÏÁö ¾ÊÀº °æ¿ì¿¡µµ »ç¿ëµÉ ¼ö ÀÖ¾î¼ ÀϹÝÀûÀ¸·Î ¼Óµµ°¡ ´À·ÁÁø´Ù. ¾ðÁ¦ ÀúÀå ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇÏ°Ô µÉÁö´Â ¾ÕÀ¸·Î Mysql¿¡ Ãß°¡ÇÒ ¸ñ·ÏÀÎ ºÎ ·Ï F¸¦ Âü°íÇÏÀÚ.(The TODO) (** Àü¹ÝÀûÀ¸·Î Æ®·£Àè¼Ç ó¸®¿Í Æ®¸®°Å µîÀº µ¥ÀÌÅͺ£À̽ºÀÇ ¼Óµµ¸¦ ÀúÇÏ ½Ãŵ´Ï´Ù. MysqlÀº ÀÌ·¸°Ô ¼Óµµ¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Â ºÎºÐÀ» Á¦°ÅÇÏ¿© ºü¸¥ ¼Óµµ¸¦ ³»´Â °ÍÀÌÁö¿ä. ÀÌ·¯ÇÑ ºÎºÐÀÌ ÀڱⰡ »ç¿ëÇÏ´Â µ¥ÀÌÅͺ£À̽º ¿¡¼ ¾ó¸¶³ª Áß¿äÇѰ¡ ÆÇ´ÜÀ» ÇØ º¸¾Æ¾ß ÇÒ °ÍÀÔ´Ï´Ù. º¸Åë ¼ÒÇü DBMS¿¡ ¼´Â ȸº¹°ú º´Çà¼öÇàÀ» Áö¿øÇÏÁö ¾Ê´Â °æ¿ì°¡ ¸¹´Ù. Áï º´Çà¼öÇàÀº ¹ß»ý ÇÏÁö ¾ÊÀ¸¸ç, ȸº¹Àº »ç¿ëÀÚÀÇ ¹®Á¦·Î »ý°¢ÇÑ´Ù. ±×·¯¹Ç·Î »ç¿ëÀÚ°¡ µ¥ÀÌÅÍ º£À̽ºÀÇ ¿¹ºñ »çº»À» ÁغñÇϸç, °íÀåÀÌ ¹ß»ýÇϸé ÀÛ¾÷À» ´Ù½Ã ÇØ¾ß ÇÑ´Ù. Æ®¸®°Å°°Àº °æ¿ì´Â ÀÚ·áÀÇ ¹«°á¼ºÀ» º¸ÀåÇϱâ À§ÇØ ÇÊ¿äÇÑ °ÍÀÌ´Ù. **) 5.2.5 ¿Ü·¡Å°(Foreign Keys) SQL ¹®¿¡¼ ¿Ü·¡Å°´Â Å×À̺íÀ» Á¶ÀÎÇÒ ¶§ »ç¿ëÇÏÁö ¾ÊÁö¸¸ ´ëºÎºÐ ÂüÁ¶ ¹«°á¼ºÀ» È®ÀÎÇÒ ¶§ »ç¿ëÇÑ´Ù. SELECT ¹®¿¡¼ ´ÙÁß Å×ÀÌºí¿¡¼ ÀڷḦ °¡Á®¿À±æ ¿øÇϸé Å×À̺íÀ» Á¶ÀÎÇØ¼ ó¸®ÇÒ ¼ö ÀÖ´Ù. SELECT * from table1,table2 where table1.id = table2.id 7.12 [JOIN] Âü°í. Mysql¿¡¼ ¿Ü·¡Å°(FOREIGN KEY) ¹®Àº ´Ù¸¥ SQL Á¦Ç°ÀÇ CREATE TABLE ¸í·É°úÀÇ È£È¯¼º ¶§¹®¿¡ Á¸ÀçÇÑ´Ù: ¿Ü·¡Å°´Â ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ´Ù. ON DELETE ... °¡ ¾ø´Â FOREIGN KEY ±¸¹®Àº ´ëºÎºÐ ¹®¼ÀûÀÎ ¸ñ ÀûÀ¸·Î »ç¿ëÇÑ´Ù. ÀϺΠODBC ¾ÖÇø®ÄÉÀ̼ÇÀº À̰ÍÀ» ÀÚµ¿ÀûÀÎ WHERE ¹®À» ¸¸µé ¶§ »ç¿ëÇÒ °ÍÀÌ´Ù. ±×·¸Áö¸¸ À̰ÍÀº ´ëºÎºÐ »ý·«(¹«½Ã)ÇÏ°í ³Ñ¾î °¡±â ½±´Ù. ¿Ü·¡Å°´Â ¶§·Î´Â Á¦¾àÁ¶°Ç üũ(constraint check)·Î »ç¿ëÀ» ÇÏ Áö¸¸ ÀÌ·¯ÇÑ Ã¼Å©´Â µ¥ÀÌÅͰ¡ Å×ÀÌºí¿¡ Á¤È®ÇÑ ¼ø¼·Î µé¾î°¥¶§´Â ºÒÇÊ¿ä ÇÏ´Ù. MysqlÀº ÀϺΠ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¿Ü·¡Å°°¡ Á¸ÀçÇÏ´Â °ÍÀ» ÇÊ¿ä·Î ÇÏ ±â ¶§¹®¿¡(Á¦´ë·Î ÀÛµ¿ÇÏµç ¾ÈÇÏµç »ó°ü¾øÀÌ) Áö¿øÇÏ´Â °ÍÀÏ »ÓÀÌ´Ù. Mysql¿¡¼ ¿Ü·¡Å°¸¦ °¡Áø Å×À̺íÀÇ ·¹Äڵ带 »èÁ¦ÇÒ ¶§ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀûÀýÇÑ DELETE ¹®À» Ãß°¡ÇÏ¿© ON DELETE ... °¡ ¼öÇàµÇ´Â °ÍÀ» ¸·À½ À¸·Î½á ¹®Á¦¸¦ ÇØ°áÇÒ ¼öÀÖ´Ù. °æÇè»ó ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ¿Ü·¡Å°¸¦ »ç¿ëÇÏ ´Â °Í°ú °°ÀÌ ºü¸£¸ç(¾î¶² °æ¿ì¿¡´Â ´õ ºü¸§) Æ÷ÆÃÇϱⰡ ´õ ÁÁ´Ù. °¡±î¿î ½ÃÀϾȿ¡ ¿ì¸®´Â ¿Ü·¡Å° ±â´ÉÀ» È®ÀåÇÒ °ÍÀÌ´Ù. ±×·¡¼ ÃÖ¼ÒÇÑ mysqldump¿Í ODBC¿¡¼ Á¤º¸°¡ ÀúÀåµÇ°í °Ë»öÇÒ ¼ö ÀÖµµ·Ï ÇÒ °ÍÀÌ´Ù. 5.2.5.1 ¿Ü·¡Å°¸¦ »ç¿ëÇÏÁö ¾Ê´Â ÀÌÀ¯ ¿Ü·¡Å°¸¦ »ç¿ëÇÒ ¶§ ¾îµð¿¡¼ Ãâ¹ßÇØ¾ß ÇÒÁö ¸ð¸£´Â ¸¹Àº ¹®Á¦°¡ ÀÖ´Ù: - ¿Ü·¡Å°´Â µ¥ÀÌÅͺ£À̽º¸¦ ¹«Ã´À̳ª º¹ÀâÇÏ°Ô ¸¸µç´Ù. ¿Ö³ÄÇÏ¸é ¿Ü·¡Å° Á¤ÀÇ´Â µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÇ¾î¾ß ÇÏ°í ¿Ü·¡Å°¸¦ ÀÌÇàÇÏ´Â °ÍÀº À̵¿, º¹ »ç, Á¦°ÅµÉ ¼ö ÀÖ´Â ÆÄÀÏÀ» »ç¿ëÇÏ´Â ÀüüÀÇ "»ç¼ÒÇÑ Á¢±Ù"À» ÆÄ±«ÇÒ °ÍÀÌ ´Ù. (** ¹ø¿ªÀÌ ÀÌ»óÇѵ¥ ¿Ü·¡Å°°¡ ÀÖÀ¸¸é ÂüÁ¶ ¹«°á¼º ±ÔÄ¢À» À§ÇØ ¿©·¯ °¡Áö º¸»ó ¿¬»êÀ» ÇÏ°Ô µÈ´Ù. À̰ÍÀ» ¶æÇϰí ÀÖ´Â µíÇÏ´Ù. **) Foreign keys make life very complicated, because the foreign key definitions must be stored in a database and implementing them would destroy the whole "nice approach" of using files that can be moved, copied and removed. - INSERT ¿Í UPDATE ¹®Àº ¼Óµµ¿¡ ¸¹Àº ¿µÇâÀ» ³¢Ä£´Ù. ±×¸®°í ÀÌ·± °æ¿ì º¸Åë ¿Ã¹Ù¸¥ ¼ø¼·Î ¿Ã¹Ù¸¥ Å×ÀÌºí¿¡ ·¹Äڵ带 »ðÀÔÇϱ⠶§¹®¿¡ ´ëºÎ ºÐ ¸ðµç ¿Ü·¡Å° üũ´Â »ç¿ëÇÒ ÇÊ¿ä ¾ø´Ù. - ÇÑÂÊÀÇ ¿µÇâÀÌ Àüü µ¥ÀÌÅͺ£À̽º¿¡ ¿¬¼â ÀÛ¿ëÀ» Çϱ⠶§¹®¿¡ Å×ÀÌºí¿¡ ¼ ¾÷µ¥ÀÌÆ®¸¦ ÇÒ ¶§ ¸Å¿ì ¸¹Àº Å×ÀÌºí¿¡¼ ¶ôÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÑ Å×ÀÌ ºí¿¡¼ ¸ÕÀú ·¹Äڵ带 »èÁ¦ÇÏ°í ±×ÈÄ¿¡ ´Ù¸¥ Å×ÀÌºí¿¡¼ ·¹Äڵ带 »èÁ¦ÇÏ ´Â °ÍÀÌ ÈξÀ ºü¸£´Ù. - Å×ÀÌºí¿¡¼ ¿ÏÀüÇÏ°Ô Áö¿ï ¶§ Å×À̺íÀ» º¹±¸ÇÒ ¼ö ¾ø°í ... You can no longer restore a table by doing a full delete from the table and then restoring all records (from a new source or from a backup). - ¿Ü·¡Å°°¡ ÀÖ´Ù¸é ¸Å¿ì Æ¯Á¤ÇÑ ¼ø¼·Î ÇÏÁö ¾Ê´ÂÇÑ Å×À̺íÀ» ´ýÇÁÇÏ°í º¹ ±¸ÇÒ ¼ö ¾ø´Ù. If you have foreign keys you can't dump and restore tables unless you do so in a very specific order. - ´ÜÀÏ create ¹®¿¡¼ °¢ Å×À̺íÀ» Àç»ý¼ºÇÏ´Â °ÍÀ» ºÒ°¡´ÉÇÏ°Ô ¸¸µå´Â "allowd" circular definitionÀ» ÇÏ´Â °ÍÀº ¸Å¿ì ½±´Ù. Á¤Àǰ¡ ÀÛµ¿À» ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ´Ù°í ÇÏ´õ¶óµµ... (** À¸... ¹«½¼ ¸»??? **) It's very easy to do "allowed" circular definitions that make the tables impossible to recreate each table with a single create statement, even if the definition works and is usable. ¿Ü·¡Å°ÀÇ ÁÁÀº Á¡Àº ´ÜÁö ´ÙÀ½¿Í °°´Ù. ODBC¿Í ƯÁ¤ÇÑ ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼ ¾î¶»°Ô Å×À̺íÀÌ ¿¬°áµÇ¾î ÀÖ´ÂÁö¸¦ º¼ ¼ö ÀÖ°í ¿¬°á ´ÙÀÌ¾î ±×·¥À» º¸´Âµ¥ »ç¿ëÇÏ¸ç ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µå´Âµ¥ µ½´Â Á¡ÀÌ´Ù. The only nice aspect of foreign key is that it gives ODBC and some other client programs the ability to see how a table is connected and use this to show connection diagrams and to help building applicatons. Mysql¿¡¼´Â °ð ¿Ü·¡Å° Á¤ÀǸ¦ ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ÇØ¼ Ŭ¶óÀÌ¾ðÆ®°¡ ¾î¶» °Ô ¿ø·¡ÀÇ ¿¬°áÀÌ ¸¸µé¾îÁ³´ÂÁö¿¡ ´ëÇØ¼ Áú¹®ÇÏ°í ´äÀ» ¹ÞÀ» ¼ö ÀÖµµ·Ï ÇÒ °ÍÀÌ´Ù. ÇöÀçÀÇ '.frm' ÆÄÀÏ Æ÷¸ËÀº ¾ÆÁ÷ À̰ÍÀ» Áö¿øÇÏÁö ¸øÇϰí ÀÖ´Ù. MySQL will soon store FOREIGN KEY definitions so that a client can ask for and receive an answer how the original connection was made. The current `.frm' file format does not have any place for it. 5.2.6 ºä MysqlÀº ºä¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ±×·¸Áö¸¸ TODO(ÀÌÈÄ °³¼± ¸ñ·Ï)¿¡ ÀÖ´Ù. MySQL doesn't support views, but this is on the TODO. 5.2.7 `--'À» »ç¿ëÇÑ ÁÖ¼® ÀϺΠ´Ù¸¥ SQL µ¥ÀÌÅͺ£À̽º´Â '--' ·Î ÁÖ¼®À» ½ÃÀÛÇÑ´Ù. mysql ¸í·É ¶ó ÀÎ µµ±¸°¡ '--'·Î ½ÃÀÛÇÏ´Â ¸ðµç ÁÙÀ» Á¦°ÅÇÒ Áö¶óµµ MysqlÀº '#'À» ÁÖ¼® ¹®ÀÇ ½ÃÀÛÀ¸·Î »ç¿ëÇÑ´Ù. »ç¿ëÀÚ´Â ¶ÇÇÑ C ¸í·É ½ºÅ¸ÀÏÀÎ /* this is a comment */ ¸¦ mysql¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. 7.28 [Comment] Âü°í. MysqlÀº '--'¸¦ Áö¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù; '--'Àº Åðº¸ÇÑ ÁÖ¼®¹® ÇüÅ·ΠÀÚµ¿ À¸·Î »ý¼ºµÇ´Â SQL ÁúÀÇ¿¡¼ ¸¹Àº ¹®Á¦¸¦ ¹ß»ý½ÃŲ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¸¦ º¸ ÀÚ. ¿ì¸®´Â ÀÚµ¿ÀûÀ¸·Î payment¸¦ !payment! ÀÇ °ªÀ¸·Î ÀÔ·ÂÇϵµ·Ï Çϰí ÀÖ´Ù : UPDATE tbl_name SET credit=credit-!payment! paymentÀÇ °ªÀÌ À½¼öÀÏ ¶§ ¾î¶² ÀÏÀÌ »ý±æ °ÍÀ̶ó »ý°¢Çϴ°¡? 1--1Àº ÇÕ´çÇÑ SQL¹®À̱⠶§¹®¿¡ '--'°¡ ÁÖ¼®¹®ÀÇ ½ÃÀÛÀ» ÀǹÌÇÏ´Â °ÍÀ» ²¨¸®´Â °ÍÀÌ´Ù. '--' ÁÖ¼®À» Æ÷ÇÔÇÏ´Â ÅØ½ºÆ® ÆÄÀÏÀÇ SQL ÇÁ·Î±×·¥À» °¡Á³´Ù¸é ´ÙÀ½°ú °° ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù: shell> replace " --" " #" < text-file-with-funny-comments.sql \ | mysql database instead of the normal(Á¤»óÀûÀÎ °æ¿ì ´ë½Å???): shell> mysql database < text-file-with-funny-comments.sql ¸í·É ÆÄÀÏ·Î '--' ÁÖ¼®À» '#' ÁÖ¼®À¸·Î ¹Ù²Ü ¼ö ÀÖ´Ù: shell> replace " --" " #" -- text-file-with-funny-comments.sql ´ÙÀ½ÀÇ ¸í·ÉÀ¸·Î ¿ø·¡´ë·Î µ¹·Á³õÀÚ: shell> replace " #" " --" -- text-file-with-funny-comments.sql (** ÀϺΠSQL¿¡¼ »ç¿ëÇÏ´Â -- ÁÖ¼®¹®¿¡¼ ¹®Á¦°¡ »ý±æ ¼ö ÀÖÀ¸¹Ç·Î MYSQL¿¡¼´Â #À» ÁÖ¼®¹®À¸·Î »ç¿ëÇÑ´Ù´Â ¸»ÀÌ´Ù **) 5.3 MysqlÀÌ µû¸£°í Àִ ǥÁØÀº ¹«¾ùÀΰ¡? Entry level SQL92. ODBC level 0-2. 5.4 BLOB ¿Í TEXT ŸÀÔÀÇ Á¦ÇÑ BLOB ³ª TEXT Çʵ忡¼ GROUP BY ³ª ORDER BY¸¦ »ç¿ëÇÏ±æ ¿øÇÏ ¸é ±× Çʵ带 °íÁ¤ ±æÀÌ °´Ã¼·Î ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô Çϴ ǥÁØÀûÀÎ ¹æ ¹ýÀº SUBSTRING Æã¼ÇÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦ º¸ÀÚ: mysql> select comment from tbl_name order by SUBSTRING(comment,20); ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é Á¤·ÄÇÒ ¶§ ¿ÀÁ÷ ù ¹øÂ° max_sort_lengths (±âº»°ª =1024)¸¸À» °í·ÁµÈ´Ù. BLOB ¿Í TEXT ´Â ±âº»°ªÀ» °¡Áú ¼ö ¾øÀ¸¸ç ¶ÇÇÑ ¾ðÁ¦³ª NULL Ä÷³ÀÏ °ÍÀÌ´Ù. BLOB and TEXT cannot have DEFAULT values and will also always be NULL columns. 5.5 COMMIT-ROLLBACK ¾øÀÌ ¾î¶»°Ô ´ëÄ¡ÇÒ ¼ö ÀÖÀ»±î? MysqlÀº COMMIT-ROLLBACK À» Áö¿øÇÏÁö ¾Ê´Â´Ù. ¹®Á¦´Â COMMIT-ROLLBACKÀ» È¿°úÀûÀ¸·Î ´Ù·ç±â À§Çؼ´Â Mysql¿¡¼ ÇöÀç »ç¿ëÇÏ´Â °Í°ú ¿ÏÀüÈ÷ ´Ù¸¥ Å×ÀÌºí ¼³°è°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù. MysqlÀº ¶ÇÇÑ Å×À̺íÀ» ÀÚµ¿ Ŭ¸°¾÷ÇÏ´Â Ãß°¡ÀûÀÎ ½º·¹µå¿Í ´õ ¸¹Àº µð½ÃÅ©¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ±â´ÉÀº ÇöÀ纸´Ù mysqlÀ» 2-4¹è ´À¸® °Ô ¸¸µç´Ù. MysqlÀº ´ëºÎºÐÀÇ ´Ù¸¥ SQL µ¥ÀÌÅͺ£À̽ºº¸´Ù ÈξÀ ´õ ºü¸£ ´Ù. (ÀüÇüÀûÀ¸·Î ÃÖ¼Ò 2-3´ë ºü¸§) ÀÌ·¯ÇÑ ÀÌÀ¯´Â Mysql¿¡ COMMIT-ROLLBACKÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. ´çºÐ°£Àº ¿ì¸®´Â SQL ¼¹ö ¾ð¾îÀÇ ¼º´ÉÀ» Çâ»ó½Ã۴µ¥ ´õ ÁÖ·ÂÇÒ °ÍÀÌ ´Ù. ´ëºÎºÐ COMMIT-ROLLBACK ±â´ÉÀÌ Á¤¸»·Î ÇÊ¿äÇÑ °æ¿ì´Â µå¹°´Ù. ¶ÇÇÑ ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ´õ ÁÁÀº ¼º´ÉÀ» ³¾ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î Æ®·£Àè¼ÇÀÌ ÇÊ¿äÇÑ ·çÆ®´Â LOCK TABLES¸¦ »ç¿ëÇØ Äڵ带 © ¼ö ÀÖ´Ù. ¶ÇÇÑ ·¹Äڵ带 ¾÷µ¥ÀÌÆ®ÇÒ ¶§ Ä¿¼¸¦ »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù. ¿ì¸®´Â Æ®·£Àè¼Ç°ú Ä¿¼¸¦ TODO¿¡ ³Ö¾úÁö¸¸ ¿ì¼±±ÇÀÌ ³ôÀº °ÍÀº ¾Æ´Ï´Ù. ÀÌ·¯ÇÑ ±â´ÉÀ» ¼öÇàÇÑ´Ù¸é CREATE TABLE ÀÇ ¿É¼ÇÀ¸·Î µÉ °ÍÀÌ´Ù. ÀÌ °ÍÀº ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ Å×ÀÌºí¿¡¼¸¸ ÀÛµ¿ÇÏ¸ç ±× Å×À̺íÀº ´À¸®°Ô µÉ °ÍÀÌ ¶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿ì¸®´Â 100% º¸ÆíÀûÀÎ µ¥ÀÌÅͺ¸´Ù´Â Á¤¸»·Î ºü¸¥ µ¥ÀÌÅͺ£À̽º°¡ ÇÊ¿äÇÏ ´Ù. COMMIT-ROLLBACK ±â´ÉÀ» ¼öÇàÇÏ´õ¶óµµ ¼Óµµ¿¡ ¼Õ»óÀÌ ¾ø´Ù¸é ¿ì ¸®´Â ±×°ÍÀ» Áö¿øÇÒ °ÍÀÌ´Ù. ´çºÐ°£Àº ´õ Áß¿äÇÏ°Ô ÇØ¾ßÇÒ ÀϵéÀÌ ¸¹ÀÌ ÀÖ ´Ù. ¿ì¸®°¡ ¾î¶² °Í¿¡ ¿ì¼±±ÇÀ» µÎ°í ÀÖ´ÂÁö´Â TODO¸¦ Âü°íÇÏÀÚ. »óÀ§ ´Ü °èÀÇ Áö¿øÀ» ¹Þ´Â °í°´Àº À̰ÍÀ» ¹Ù²Ü ¼ö ÀÖÀ¸¸ç ¿ì¼±±ÇÀÌ º¯°æµÉ ¼öµµ ÀÖ ´Ù. ÇöÀçÀÇ ¹®Á¦´Â ½ÇÁ¦·Î ROLLBACK ÀÌ´Ù. ·Ñ¹é¾øÀÌ LOCK TABLESÀ» ÀÌ ¿ëÇÏ¿© ¿©·¯ Á¾·ùÀÇ COMMIT¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ·Ñ¹éÀ» Áö¿øÇϱâ À§ÇØ MysqlÀº ¾÷µ¥ÀÌÆ®°¡ µÈ ¸ðµç ¿¹Àü ·¹Äڵ带 ÀúÀåÇÏ°í ·Ñ¹éÀÌ ÀÏÀ̳µÀ» ¶§ ½ÃÀÛ ½ÃÁ¡À¸·Î µ¹¾Æ°¥ ¼ö ÀÖµµ·Ï ¹Ù²Ù¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ÀÌ·¯ÇÑ °ÍÀº ÀüÇô ¾î·ÆÁö ¾Ê´Ù.(ÇöÀçÀÇ isamlog ´Â ÀÌ·± °æ¿ì¸¦ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù) ±×·¯³ª ALTER/DROP/CREATE TABLE¿¡¼ ·Ñ¹éÀ» ¼öÇàÇÏ´Â °ÍÀº ¹«Ã´ ¾î·Æ´Ù. ·Ñ¹é »ç¿ëÀ» ÇÇÇϱâ À§ÇØ ´ÙÀ½ÀÇ Àü·«À» »ç¿ëÇÒ ¼ö ÀÖ´Ù: 1. Á¢±ÙÇϱ⠿øÇÏ´Â ¸ðµç Å×ÀÌºí¿¡ ¶ôÀ» »ç¿ë. LOCK TABLES ... 2. Á¶°Ç Å×½ºÆ®(Test conditions) 3. ¸ðµç °ÍÀÌ Á¦´ë·Î µÈ´Ù¸é ¾÷µ¥ÀÌÆ®¸¦ ÇÑ´Ù. 4. UNLOCK TABLES ÀϹÝÀûÀ¸·Î °¡´ÉÇÑ ·Ñ¹éÀ» ÀÌ¿ëÇØ Æ®·£Àè¼ÇÀ» »ç¿ëÇÏ´Â °Íº¸´Ù´Â ÀÌ·¯ÇÑ ¹æ¹ýÀÌ ÈξÀ ´õ ºü¸£´Ù. ±×·¸Áö¸¸ Ç×»ó »ç¿ë°¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ ¹ýÀ¸·Î ÇØ°áÇÒ ¼ö ¾ø´Â À¯ÀÏÇÑ »óȲÀº ¾÷µ¥ÀÌÆ®Áß ´©±º°¡°¡ ½º·¹µå¸¦ Á׿´ À» ¶§ÀÌ´Ù. ÀÌ·± °æ¿ì ¸ðµç ¶ôÀº ÇØÁ¦°¡ µÈ´Ù. ±×·¸Áö¸¸ ¾÷µ¥ÀÌÆ®ÀÇ ÀϺδ ½ÇÇàµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹°·Ð ´ÜÀÏ ¿ÀÆÛ·¹À̼ǿ¡¼ ·¹Äڵ带 ¾÷µ¥ÀÌÆ®ÇÏ´Â Æã¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ Å×Å©´ÐÀ» »ç¿ëÇÏ¸ç ¸Å¿ì È¿À²ÀûÀÎ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé ¼ö ÀÖ´Ù: - ÇöÀç °ª°ú °ü·ÃµÇ¾î ÀÖ´Â Çʵ带 ¼öÁ¤ - ½ÇÁ¦·Î º¯È°¡ »ý°åÀ»¶§¸¸ Çʵ带 ¾÷µ¥ÀÌÆ® ¿¹¸¦ µé¾î, ¾î¶² °í°´ Á¤º¸¸¦ ¾÷µ¥ÀÌÆ® ÇÒ ¶§ ¿ÀÁ÷ ¹Ù²ï µ¥ÀÌÅ͸¸ ¾÷µ¥ÀÌ Æ®¸¦ ÇÑ´Ù. ±×¸®°í For example, when we are doing updates on some customer information, we update only the customer data that have changed and test only that none of the changed data, or data that depend on the changed data, have changed compared to the original row. º¯ÈµÈ µ¥ÀÌÅÍÀÇ Å×½ºÆ®´Â UPDATE ¹®¿¡¼ WHRE ÀýÀ» »ç¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Ù. ·¹Äڵ尡 ¾÷µ¥ÀÌÆ®µÇÁö ¾Ê¾Ò´Ù¸é Ŭ¶óÀÌ¾ðÆ®¿¡ ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö ¸¦ ÁØ´Ù: "´ç½ÅÀÌ ¹Ù²Û µ¥ÀÌÅÍ ÀϺΰ¡ ´Ù¸¥ »ç¿ëÀÚ¿¡ ÀÇÇØ ¹Ù²î¾ú½À´Ï´Ù". ±×·¯°í³ª¼ ¿ì¸®´Â À©µµ¿ì¿¡¼ ¿¹ÀüÀÇ ·¹ÄÚµå¿Í ÇöÀçÀÇ ·¹Äڵ带 ºñ±³ÇÏ¿© º¸¿©ÁØ´Ù. ±×·¯¸é »ç¿ëÀÚ´Â ¾î¶² °í°´ Á¤º¸ ·¹Äڵ带 »ç¿ëÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϸé "Ä÷³ ¶óÅ·"°ú ºñ½ÁÇÏ´Ù. ±×·¸Áö¸¸ ½ÇÁ¦·Î´Â ´õ ºü¸£´Ù. ¿Ö³Ä Çϸé ÇöÀçÀÇ °ª°ú °ü·ÃµÇ¾î ÀÖ´Â °ªÀÇ Ä÷³¸¸ ¾÷µ¥ÀÌÆ®Çϱ⠶§¹®ÀÌ´Ù. ÀÌ ·¸³ª ÀüÇüÀûÀÎ ¾÷µ¥ÀÌÆ®¹®Àº ´ÙÀ½°ú ºñ½ÁÇÒ °ÍÀÌ´Ù: UPDATE tablename SET pay_back=pay_back+'relative change'; UPDATE customer SET customer_date='current_date', address='new address', phone='new phone', money_he_owes_us=money_he_owes_us+'new_money' WHERE customer_id=id AND address='old address' AND phone='old phone'; Áö±Ý º¸µíÀÌ ÀÌ·¸°Ô ÇÏ¸é ¸Å¿ì È¿À²ÀûÀÌ¸ç ¼³»ç ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®°¡ pay_back À̳ª money_he_owes_us Ä÷³ÀÇ °ªÀ» ¹Ù²Ù¾úÀ» ¶§¶óµµ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì, »ç¿ëÀÚ´Â Å×ÀÌºí¿¡¼ À¯ÀÏÇÑ °ª(identifiers)À» °ü¸®Çϱâ À§ ÇØ ·Ñ¹é°ú Å×ÀÌºí ¶ôÀ» »ç¿ëÇÏ°í ½Í¾îÇÑ´Ù. À̰ÍÀº AUTO_INCREMENT Ä÷³°ú SQL LAST_INSERT_ID() Æã¼Ç, ¶Ç´Â mysql_insert_id() ÀÇ C API Æã¼ÇÀ» »ç¿ëÇÏ¿© ´õ¿í È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. 18.4.49 [mysql_insert_id()] Âü°í. TcX¿¡¼´Â ¾ðÁ¦³ª ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö Àֱ⠶§¹®¿¡ °á°í low-level ¶ô À» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ¾î¶² °æ¿ì¿¡´Â Á¤¸»·Î ·Î¿ì-¶ôÀÌ ÇÊ¿äÇÏ´Ù. ±×·¸Áö ¸¸ ÀÌ·± °æ¿ì´Â ±Ø¼Ò¼öÀÌ´Ù. ·Î¿ì-·¹º§ ¶ôÀ» ¿øÇϸé Å×ÀÌºí¿¡¼ Ç÷¡±× Äà ·³À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°´Ù: UPDATE tbl_name SET row_flag=1 WHERE id=ID; ¸¸¾à row°¡ ¹ß°ßµÇ°í row_flag°¡ ¿ø·¡ÀÇ row¿¡¼ ÀÌ¹Ì 1ÀÌ ¾Æ´Ï¶ó¸é ¿µÇâ À» ¹ÞÀº rowÀÇ ¼ýÀڷμ 1ÀÏ ¹ÝȯÇÑ´Ù. MySQL returns 1 fro the number of affected rows if the row was found and row_flag wasn't already 1 in the original row. |
![]() ![]() ![]() ![]() |
![]() ![]() ![]() |