:meta-keywords: insert statement, insert set, insert select, on duplicate key update, odku :meta-description: You can insert a new record into a table in a database by using the INSERT statement. CUBRID supports INSERT ... VALUES, INSERT ... SET and INSERT ... SELECT statements. ****** INSERT ****** **INSERT** ë¬¸ì„ ì‚¬ìš©í•˜ì—¬ ë°ì´í„°ë² ì´ìŠ¤ì— ì¡´ìž¬í•˜ëŠ” í…Œì´ë¸”ì— ìƒˆë¡œìš´ ë ˆì½”ë“œë¥¼ ì‚½ìž…í• ìˆ˜ 있다. CUBRID는 **INSERT ... VALUES** 문, **INSERT ... SET** 문, **INSERT ... SELECT** ë¬¸ì„ ì§€ì›í•œë‹¤. **INSERT ... VALUES** 문과 **INSERT ... SET** ë¬¸ì€ ëª…ì‹œì 으로 ì§€ì •ëœ ê°’ì„ ê¸°ë°˜ìœ¼ë¡œ 새로운 ë ˆì½”ë“œë¥¼ 삽입하며, **INSERT ... SELECT** ë¬¸ì€ ë‹¤ë¥¸ í…Œì´ë¸”ì—서 조회한 ê²°ê³¼ ë ˆì½”ë“œë¥¼ ì‚½ìž…í• ìˆ˜ 있다. ë‹¨ì¼ **INSERT** ë¬¸ì„ ì´ìš©í•˜ì—¬ 여러 í–‰ì„ ì‚½ìž…í•˜ê¸° 위해서는 **INSERT ... VALUES** 문 ë˜ëŠ” **INSERT ... SELECT** ë¬¸ì„ ì‚¬ìš©í•œë‹¤. :: <INSERT ... VALUES statement> INSERT [INTO] <table_specification> [(column_name, ...)] {VALUES | VALUE}({expr | DEFAULT}, ...)[,({expr | DEFAULT}, ...),...] [ON DUPLICATE KEY UPDATE column_name = expr, ... ] INSERT [INTO] <table-specification> DEFAULT [ VALUES ] <INSERT ... SET statement> INSERT [INTO] <table_specification> SET column_name = {expr | DEFAULT}[, column_name = {expr | DEFAULT},...] [ON DUPLICATE KEY UPDATE column_name = expr, ... ] <INSERT ... SELECT statement> INSERT [INTO] <table_specification> [(column_name, ...)] SELECT... [ON DUPLICATE KEY UPDATE column_name = expr, ... ] <table_specification> ::= [schema_name.]table_name | <remote_table_spec> <remote_table_spec> ::= [schema_name.]table_name@[shema_name.]server_name * *schema_name*: 스키마 ì´ë¦„ì„ ì§€ì •í•œë‹¤. ìƒëžµí•˜ë©´ 현재 ì„¸ì…˜ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì‚¬ìš©í•œë‹¤. * *table_name*: 새로운 ë ˆì½”ë“œë¥¼ ì‚½ìž…í• ëŒ€ìƒ í…Œì´ë¸” ì´ë¦„ì„ ì§€ì •í•œë‹¤. * *server_name*: dblink로 ì—°ê²°í• ì›ê²© 서버 ì´ë¦„ì„ ì§€ì •í•œë‹¤. * *column_name*: ê°’ì„ ì‚½ìž…í• ì¹¼ëŸ¼ ì´ë¦„ì„ ì§€ì •í•œë‹¤. ì´ ê°’ì„ ìƒëžµí•˜ë©´, í…Œì´ë¸”ì— ì •ì˜ëœ ëª¨ë“ ì¹¼ëŸ¼ì´ ëª…ì‹œëœ ê²ƒìœ¼ë¡œ 간주ë˜ë¯€ë¡œ ëª¨ë“ ì¹¼ëŸ¼ì— ëŒ€í•œ ê°’ì„ **VALUES** ë’¤ì— ëª…ì‹œí•´ì•¼ 한다. í…Œì´ë¸”ì— ì •ì˜ëœ 칼럼 중 ì¼ë¶€ 칼럼만 명시하면 나머지 칼럼ì—는 **DEFAULT** 로 ì •ì˜ëœ ê°’ì´ í• ë‹¹ë˜ë©°, ì •ì˜ëœ ê¸°ë³¸ê°’ì´ ì—†ëŠ” 경우 **NULL** ê°’ì´ í• ë‹¹ëœë‹¤. * *expr* | **DEFAULT**: **VALUES** ë’¤ì—는 ì¹¼ëŸ¼ì— ëŒ€ì‘하는 칼럼 ê°’ì„ ëª…ì‹œí•˜ë©°, í‘œí˜„ì‹ ë˜ëŠ” **DEFAULT** 키워드를 값으로 ì§€ì •í• ìˆ˜ 있다. ëª…ì‹œëœ ì¹¼ëŸ¼ ë¦¬ìŠ¤íŠ¸ì˜ ìˆœì„œì™€ 개수는 칼럼 ê°’ 리스트와 대ì‘ë˜ì–´ì•¼ 하며, í•˜ë‚˜ì˜ ë ˆì½”ë“œì— ëŒ€í•´ 칼럼 ê°’ 리스트는 괄호로 처리ëœë‹¤. * **DEFAULT**: ê¸°ë³¸ê°’ì„ ì¹¼ëŸ¼ 값으로 명시하기 위하여 **DEFAULT** 키워드를 ì‚¬ìš©í• ìˆ˜ 있다. **VALUES** 키워드 ë’¤ì˜ ì¹¼ëŸ¼ ê°’ 리스트 ë‚´ì— **DEFAULT** 를 명시하면 해당 ì¹¼ëŸ¼ì— ê¸°ë³¸ê°’ì„ ì €ìž¥í•˜ê³ , **VALUES** 키워드 ì•žì— **DEFAULT** 를 명시하면 í…Œì´ë¸” ë‚´ ëª¨ë“ ì¹¼ëŸ¼ì— ëŒ€í•´ ê¸°ë³¸ê°’ì„ ì €ìž¥í•œë‹¤. ê¸°ë³¸ê°’ì´ ì •ì˜ë˜ì§€ ì•Šì€ ì¹¼ëŸ¼ì— ëŒ€í•´ì„œëŠ” **NULL** ì„ ì €ìž¥í•œë‹¤. * **ON DUPLICATE KEY UPDATE**: **PRIMARY KEY** ë˜ëŠ” **UNIQUE** ì†ì„±ì´ ì •ì˜ëœ ì¹¼ëŸ¼ì— ì¤‘ë³µ ê°’ì´ ì‚½ìž…ë˜ì–´ ì œì•½ ì¡°ê±´ ìœ„ë°˜ì´ ë°œìƒí•˜ë©´, **ON DUPLICATE KEY UPDATE** ì ˆì— ëª…ì‹œëœ ì•¡ì…˜ì„ ìˆ˜í–‰í•˜ë©´ì„œ ì œì•½ ì¡°ê±´ ìœ„ë°˜ì„ ë°œìƒì‹œí‚¨ ê°’ì„ íŠ¹ì • 값으로 변경한다. .. code-block:: sql CREATE TABLE a_tbl1( id INT UNIQUE, name VARCHAR, phone VARCHAR DEFAULT '000-0000' ); --insert default values with DEFAULT keyword before VALUES INSERT INTO a_tbl1 DEFAULT VALUES; --insert multiple rows INSERT INTO a_tbl1 VALUES (1,'aaa', DEFAULT),(2,'bbb', DEFAULT); --insert a single row specifying column values for all INSERT INTO a_tbl1 VALUES (3,'ccc', '333-3333'); --insert two rows specifying column values for only INSERT INTO a_tbl1(id) VALUES (4), (5); --insert a single row with SET clauses INSERT INTO a_tbl1 SET id=6, name='eee'; INSERT INTO a_tbl1 SET id=7, phone='777-7777'; SELECT * FROM a_tbl1; :: id name phone ========================================================= NULL NULL '000-0000' 1 'aaa' '000-0000' 2 'bbb' '000-0000' 3 'ccc' '333-3333' 4 NULL '000-0000' 5 NULL '000-0000' 6 'eee' '000-0000' 7 NULL '777-7777' .. code-block:: sql INSERT INTO a_tbl1 SET id=6, phone='000-0000' ON DUPLICATE KEY UPDATE phone='666-6666'; SELECT * FROM a_tbl1 WHERE id=6; :: id name phone ========================================================= 6 'eee' '666-6666' .. code-block:: sql INSERT INTO a_tbl1 SELECT * FROM a_tbl1 WHERE id=7 ON DUPLICATE KEY UPDATE name='ggg'; SELECT * FROM a_tbl1 WHERE id=7; :: id name phone ========================================================= 7 'ggg' '777-7777' **INSERT ... SET** 문ì—서 í• ë‹¹ 표현ì‹ì— 대한 í‰ê°€ëŠ” 왼쪽ì—서 오른쪽으로 수행ëœë‹¤. 칼럼 ê°’ì´ ì •í•´ì§€ì§€ 않았으면 ê¸°ë³¸ê°’ì„ í• ë‹¹í•˜ê³ , ê¸°ë³¸ê°’ì´ ì—†ìœ¼ë©´ **NULL**\ì„ í• ë‹¹í•œë‹¤. .. code-block:: sql CREATE TABLE tbl (a INT, b INT, c INT); INSERT INTO tbl SET a=1, b=a+1, c=b+2; SELECT * FROM tbl; :: a b c =================================== 1 2 4 ìœ„ì˜ ì˜ˆì—서 칼럼 bì˜ ê°’ì„ í• ë‹¹í• ë•Œ, aì˜ ê°’ì´ 1ì´ë¯€ë¡œ b는 2, c는 4ê°€ ëœë‹¤. .. code-block:: sql CREATE TABLE tbl2 (a INT, b INT, c INT); INSERT INTO tbl2 SET a=b+1, b=1, c=b+2; ìœ„ì˜ ì˜ˆì—서 칼럼 aì˜ ê°’ì„ í• ë‹¹í• ë•Œ, bì˜ ê°’ì´ ì•„ì§ ì •í•´ì§€ì§€ 않았으며 bì˜ ê¸°ë³¸ê°’ì´ ì—†ìœ¼ë¯€ë¡œ aì˜ ê°’ì€ **NULL**\ ì´ ëœë‹¤. .. code-block:: sql SELECT * FROM tbl2; :: a b c =================================== NULL 1 3 .. code-block:: sql CREATE TABLE tbl3 (a INT, b INT default 10, c INT); INSERT INTO tbl3 SET a=b+1, b=1, c=b+2; ìœ„ì˜ ì˜ˆì—서 칼럼 aì˜ ê°’ì„ í• ë‹¹í• ë•Œ, bì˜ ê°’ì´ ì•„ì§ ì •í•´ì§€ì§€ 않았으며 bì˜ ê¸°ë³¸ê°’ì´ 10ì´ë¯€ë¡œ aì˜ ê°’ì€ 11ì´ ëœë‹¤. .. code-block:: sql SELECT * FROM tbl3; :: a b c =================================== 11 1 3 INSERT ... SELECT 문 ==================== **INSERT** ë¬¸ì— **SELECT** 질ì˜ë¥¼ 사용하면 하나 ì´ìƒì˜ í…Œì´ë¸”로부터 íŠ¹ì • 검색 ì¡°ê±´ì„ ë§Œì¡±í•˜ëŠ” ì§ˆì˜ ê²°ê³¼ë¥¼ ëŒ€ìƒ í…Œì´ë¸”ì— ì‚½ìž…í• ìˆ˜ 있다. :: INSERT [INTO] [schema_name.]table_name [(column_name, ...)] SELECT... [ON DUPLICATE KEY UPDATE column_name = expr, ... ] **SELECT** ë¬¸ì€ **VALUES** 키워드 ëŒ€ì‹ ì‚¬ìš©í•˜ê±°ë‚˜ **VALUES** ë’¤ì˜ ì¹¼ëŸ¼ ê°’ 리스트 ë‚´ì— ë¶€ì§ˆì˜ë¡œì„œ í¬í•¨ë 수 있다. **VALUES** 키워드를 ëŒ€ì‹ í•˜ì—¬ **SELECT** ë¬¸ì„ ëª…ì‹œí•˜ë©´, ì§ˆì˜ ê²°ê³¼ë¡œ ì–»ì€ ë‹¤ìˆ˜ì˜ ë ˆì½”ë“œë¥¼ 한 ë²ˆì— ëŒ€ìƒ í…Œì´ë¸” ì¹¼ëŸ¼ì— ì‚½ìž…í• ìˆ˜ 있다. 그러나, **SELECT** ë¬¸ì„ ì¹¼ëŸ¼ ê°’ 리스트 ë‚´ì— ë¶€ì§ˆì˜ë¡œ ì‚¬ìš©í•˜ë ¤ë©´ ì§ˆì˜ ê²°ê³¼ ë ˆì½”ë“œê°€ 하나여야 한다. .. code-block:: sql --creating an empty table which schema replicated from a_tbl1 CREATE TABLE a_tbl2 LIKE a_tbl1; --inserting multiple rows from SELECT query results INSERT INTO a_tbl2 SELECT * FROM a_tbl1 WHERE id IS NOT NULL; --inserting column value with SELECT subquery specified in the value list INSERT INTO a_tbl2 VALUES(8, SELECT name FROM a_tbl1 WHERE name <'bbb', DEFAULT); SELECT * FROM a_tbl2; :: id name phone ========================================================= 1 'aaa' '000-0000' 2 'bbb' '000-0000' 3 'ccc' '333-3333' 4 NULL '000-0000' 5 NULL '000-0000' 6 'eee' '000-0000' 7 NULL '777-7777' 8 'aaa' '000-0000' INSERT INTO <remote-table-spec>… SELECT 문 ============================================ INSERT ë¬¸ì— SELECT 질ì˜ì—서 사용한 ë™ì¼ ì›ê²© ì„œë²„ì˜ ì›ê²© í…Œì´ë¸”ì„ ì‚¬ìš©í•˜ë©´ 하나 ì´ìƒì˜ ì›ê²© í…Œì´ë¸”로부터 íŠ¹ì • 검색 ì¡°ê±´ì— ë§Œì¡±í•˜ëŠ” ì§ˆì˜ ê²°ê³¼ë¥¼ ì›ê²© í…Œì´ë¸”ì— ì‚½ìž…í• ìˆ˜ 있다. 단, SELECTë¬¸ì— ëª…ì‹œëœ í…Œì´ë¸” 중 INSERT êµ¬ë¬¸ì˜ ì›ê²© í…Œì´ë¸”ê³¼ 다른 ì„œë²„ì˜ í…Œì´ë¸” (로컬 í…Œì´ë¸” ë˜ëŠ” 다른 ì›ê²© ì„œë²„ì˜ í…Œì´ë¸”)ì„ ì‚¬ìš©ì‹œ ì—러가 ë°œìƒí•œë‹¤. .. code-block:: sql --at remote-side --creating an empty table which schema replicated from a_tbl1 CREATE TABLE a_tbl2 LIKE a_tbl1; --at local-side --inserting multiple rows from SELECT query results INSERT INTO a_tbl2@server1 SELECT * FROM a_tbl1@server1 WHERE id IS NOT NULL; --inserting column value with SELECT subquery specified in the value list INSERT INTO a_tbl2@server1 VALUES(8, SELECT name FROM a_tbl1@server1 WHERE name <'bbb', DEFAULT); SELECT * FROM a_tbl2@server1; :: id name phone ========================================================= 1 'aaa' '000-0000' 2 'bbb' '000-0000' 3 'ccc' '333-3333' 4 NULL '000-0000' 5 NULL '000-0000' 6 'eee' '000-0000' 7 NULL '777-7777' 8 'aaa' '000-0000' ì›ê²© í…Œì´ë¸”ì˜ ë°ì´í„°ëŠ” 로컬 í…Œì´ë¸”로 삽입 가능하나 로컬 í…Œì´ë¸”ì˜ ë°ì´í„°ë¥¼ ì›ê²© í…Œì´ë¸”ì— ì‚½ìž…í•˜ëŠ” 질ì˜ëŠ” ì‚¬ìš©í• ìˆ˜ 없으므로 사용시 주ì˜í•´ì•¼ 한다. ì•„ëž˜ì˜ ì§ˆì˜ëŠ” ì—러가 ë°œìƒí•œë‹¤. .. code-block:: sql --inserting multiple rows from SELECT query results INSERT INTO a_tbl2@server1 SELECT * FROM a_tbl1 WHERE id IS NOT NULL; dblink: local mixed remote DML is not allowed ë˜í•œ INSERT 구문과 SELECT 구문ì—서 사용한 ì›ê²© í…Œì´ë¸”ì˜ ì„œë²„ê°€ 다른 경우 ì§ˆì˜ ìˆ˜í–‰ì´ í—ˆìš©ë˜ì§€ 않는다. ì•„ëž˜ì˜ ì§ˆì˜ëŠ” ì—러가 ë°œìƒí•œë‹¤. .. code-block:: sql --inserting multiple rows from SELECT query results INSERT INTO a_tbl2@server1 SELECT * FROM a_tbl1@server2 WHERE id IS NOT NULL; dblink: multi-remote DML is not allowed ON DUPLICATE KEY UPDATE ì ˆ ========================== **INSERT** ë¬¸ì— **ON DUPLICATE KEY UPDATE** ì ˆì„ ëª…ì‹œí•˜ì—¬ **UNIQUE** ì¸ë±ìФ ë˜ëŠ” **PRIMARY KEY** ì œì•½ ì¡°ê±´ì´ ì„¤ì •ëœ ì¹¼ëŸ¼ì— ì¤‘ë³µëœ ê°’ì´ ì‚½ìž…ë˜ëŠ” ìƒí™©ì—서 ì—러를 ì¶œë ¥í•˜ì§€ ì•Šê³ ìƒˆë¡œìš´ 값으로 ê°±ì‹ í• ìˆ˜ 있다. .. note:: * **PRIMARY KEY**\ 와 **UNIQUE** ë˜ëŠ” ë‹¤ìˆ˜ì˜ **UNIQUE**\ ê°€ 한 í…Œì´ë¸”ì— ê°™ì´ ì¡´ìž¬í•˜ëŠ” 경우, 둘 중 í•˜ë‚˜ì— ì˜í•´ ì œì•½ ì¡°ê±´ ìœ„ë°˜ì´ ë°œìƒí• 수 있으므로 **ON DUPLICATE KEY UPDATE** ì ˆì˜ ì‚¬ìš©ì„ ê¶Œìž¥í•˜ì§€ 않는다. * **INSERT**\ ì— ì‹¤íŒ¨í•˜ì—¬ **UPDATE**\ ê°€ 실행ë˜ë”ë¼ë„ 한 번 ì¦ê°€í•œ **AUTO_INCREMENT** ê°’ì€ ì˜ˆì „ 값으로 롤백ë˜ì§€ 않는다. :: <INSERT ... VALUES statement> <INSERT ... SET statement> <INSERT ... SELECT statement> INSERT ... [ON DUPLICATE KEY UPDATE column_name = expr, ... ] * *column_name* = *expr*: **ON DUPLICATE KEY UPDATE** ë’¤ì— ì¹¼ëŸ¼ ê°’ì„ ë³€ê²½í•˜ê³ ìž í•˜ëŠ” 칼럼 ì´ë¦„ì„ ëª…ì‹œí•˜ê³ , 등호 부호를 ì´ìš©í•˜ì—¬ 새로운 칼럼 ê°’ì„ ëª…ì‹œí•œë‹¤. .. code-block:: sql --creating a new table having the same schema as a_tbl1 CREATE TABLE a_tbl3 LIKE a_tbl1; INSERT INTO a_tbl3 SELECT * FROM a_tbl1 WHERE id IS NOT NULL and name IS NOT NULL; SELECT * FROM a_tbl3; :: id name phone ========================================================= 1 'aaa' '000-0000' 2 'bbb' '000-0000' 3 'ccc' '333-3333' 6 'eee' '000-0000' .. code-block:: sql --insert duplicated value violating UNIQUE constraint INSERT INTO a_tbl3 VALUES(2, 'bbb', '222-2222'); :: ERROR: Operation would have caused one or more unique constraint violations. ON DUPLICATE KEY UPDATEì—서 "affected rows" ê°’ì€ ìƒˆë¡œìš´ í–‰ì´ ì‚½ìž…ë˜ì—ˆì„ 경우ì—는 1ì´ê³ , 존재하는 í–‰ì´ ì—…ë°ì´íЏë˜ì—ˆì„ 경우ì—는 2ì´ë‹¤. .. code-block:: sql --insert duplicated value with specifying ON DUPLICATED KEY UPDATE clause INSERT INTO a_tbl3 VALUES(2, 'ggg', '222-2222') ON DUPLICATE KEY UPDATE name='ggg', phone = '222-2222'; SELECT * FROM a_tbl3 WHERE id=2; :: id name phone ========================================================= 2 'ggg' '222-2222' 2 rows affected.