DML
INSERT
insert_stmt:
insert_column_list:
value_list:
set_list:
insert_stmt ::= 'INSERT INTO' table_name ( '(' insert_column_list ')' )? 'METADATA'? 'VALUES' '(' value_list ')' ( 'ON DUPLICATE KEY UPDATE' ( 'SET' set_list )? )? insert_column_list ::= column_name ( ',' column_name )* value_list ::= value ( ',' value )* set_list ::= column_name '=' value ( ',' column_name '=' value )*
create table test (number int,name varchar(20)); Created successfully. insert into test values (1,"test"); 1 row(s) inserted. insert into test(name,number) values ("test",2); 1 row(s) inserted.
ํน์ ํ ์ด๋ธ์ ๊ฐ์ ์ ๋ ฅํ๋ ๊ตฌ๋ฌธ์ด๋ค. ํ ๊ฐ์ง ํน์ดํ ์ ์ Column_List์์ ์ง์ ๋์ง ์์ ์ปฌ๋ผ์๋ ๋ชจ๋ NULL ๊ฐ์ผ๋ก ์ฑ์์ง๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ์ ๋ ฅ์ ํธ์์ฑ๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํจ์จํ๋ฅผ ์ํด ์ฑํ๋ ๋ก๊ทธ ํ์ผ์ ํน์ฑ์ ๊ณ ๋ คํ ์ ์ฑ ์ด๋ค.
METADATA๋ tag table์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ชฉ์ฐจ
INSERT ON DUPLICATE KEY UPDATE
๋งํฌ๋ฒ ์ด์ค๋, ํํ ์๋ ค์ง UPSERT ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ๊ตฌ๋ฌธ์ ์ง์ํ๋ค.
๊ธฐ๋ณธ ํค๊ฐ ์ง์ ๋ Lookup/Volatile ํ
์ด๋ธ์ ๊ฐ์ ์
๋ ฅํ ๋ ์ฌ์ฉํ ์ ์๋ ํน์ ๊ตฌ๋ฌธ์ผ๋ก, ๊ธฐ๋ณธ ํค ๊ฐ์ด ์ค๋ณต๋๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ํ
์ด๋ธ์ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
๋ฌผ๋ก , ํค ๊ฐ์ด ์ค๋ณต๋๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์๋ก์ด ๋ฐ์ดํฐ๋ก ์ฝ์
๋๋ค.
์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํด์, ํ๋ฐ์ฑ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๊ฐ ์ง์ ๋์ด ์์ด์ผ ํ๋ค.
์ฝ์ ๋๋ ๋ฐ์ดํฐ์ ์ปฌ๋ผ ๊ฐ๊ณผ ๊ฐฑ์ ๋๋ ๋ฐ์ดํฐ์ ์ปฌ๋ผ ๊ฐ์ ๋ค๋ฅด๊ฒ ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ๋๋ ์ฝ์ ๋๋ ๋ฐ์ดํฐ์ ์ปฌ๋ผ ๊ฐ์ด ์๋ ๋ค๋ฅธ ์ปฌ๋ผ ๊ฐ์ ๊ฐฑ์ ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์๋ SET ์ ์ ์ถ๊ฐ๋ก ์ ๋ ฅํ ์ ์๋ค.
SET ์ ์๋ย '์ปฌ๋ผ=๊ฐ'์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ์ ์ฝค๋ง๋ก ๊ตฌ๋ถํด์ผ ํ๋ค.
SET ์ ์์ ๊ธฐ๋ณธ ํค ๊ฐ์ ๋ณ๊ฒฝํด์๋ ์ ๋๋ค.
INSERT SELECT
insert_select_stmt:
insert_select_stmt ::= 'INSERT INTO' table_name ( '(' insert_column_list ')' )? select_stmt
ํน์ table์ ๋ํด์ SELECT ๋ฌธ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์ ํ๋ ๋ฌธ์ฅ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ค๋ฅธ DBMS์ ์ ์ฌํ์ง๋ง ๋ค์์ ์ฐจ์ด์ ์ด ์๋ค.
_ARRIVAL_TIME ์ปฌ๋ผ ๊ฐ์ select ๋ฐ INSERT ์ปฌ๋ผ ๋ฆฌ์คํธ์์ ์ง์ ๋์ง ์์ผ๋ฉด INSERT SELECT ๋ฌธ์ด ์ํ๋๋ ์์ ์ ์๊ฐ ๊ฐ์ผ๋ก ์ ๋ ฅ๋๋ค.
VARCHAR ํ์ ์ ์ปฌ๋ผ์ ๋ํด์ ์ฝ์ ๋๋ ์ ๋ ฅ๊ฐ์ด ์ปฌ๋ผ์ ์ต๋ ๊ธธ์ด๋ณด๋ค ํฐ ๊ฒฝ์ฐ, ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ํด๋น ์ปฌ๋ผ์ ์ต๋ ๊ธธ์ด๋งํผ ์๋ผ์ ์ ๋ ฅ๋๋ค.
ํ ๋ณํ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์ซ์ํ->์ซ์ํ)์๋ ์ ๋ ฅ๋๋ ์ปฌ๋ผ ๊ฐ์ ๋ง๊ฒ ์ฝ์ ๋๋ค.
์ํ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ROLLBACK๋์ง ์๋๋ค.
_ARRIVAL_TIME ์ปฌ๋ผ์ ๊ฐ์ ์ง์ ํ์ฌ ์ฝ์ ํ๋ ๊ฒฝ์ฐ, ์๋ก ์ ๋ ฅ๋๋ ๊ฐ์ด ๊ธฐ์กด์ ๊ฐ๋ณด๋ค ์ด์ ์๊ฐ์ ๊ฐ๊ณ ์์ผ๋ฉด ์ ๋ ฅ๋์ง ์๋๋ค.
create table t1 (i1 integer, i2 varchar(60), i3 varchar(5)); Created successfully. insert into t1 values (1, 'a', 'ddd' ); 1 row(s) inserted. insert into t1 values (2, 'kkkkkkkkkkkkkkkkkkkkk', 'c'); 1 row(s) inserted. insert into t1 select * from t1; 2 row(s) inserted. create table t2 (i1 integer, i2 varchar(60), i3 varchar(5)); insert into t2 (_arrival_time, i1, i2, i3) select _arrival_time, * from t1; 4 row(s) inserted.
UPDATE
5.5 ๋ถํฐ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ๋๋ค.
update_stmt:
update_expr_list:
update_expr:
update_stmt ::= 'UPDATE' table_name ( 'METADATA' )? 'SET' update_expr_list 'WHERE' primary_key_column '=' value update_expr_list ::= update_expr ( ',' update_expr)* update_expr ::= column '=' value
INSERT ON DUPLICATE KEY UPDATE ๋ฅผ ํตํ UPSERT ๊ฐ ์๋, UPDATE ๊ตฌ๋ฌธ๋ ์ ๊ณต๋๋ค.
์ญ์, ๊ธฐ๋ณธ ํค (Primary Key) ๊ฐ ์ง์ ๋ Lookup/Volatile ํ ์ด๋ธ์ ๊ฐ์ ์ ๋ ฅํ ๋ ์ฌ์ฉํ ์ ์๋ค. WHERE ์ ์๋ ๊ธฐ๋ณธ ํค์ ์ผ์น ์กฐ๊ฑด์์ ์์ฑํด์ผ ํ๋ค.
UPDATE METADATA
TAGDATA ํ ์ด๋ธ์ ํํด์, ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
UPDATE TAG METADATA SET ...
TAGDATA ํ ์ด๋ธ์ ๋ฉํ๋ฐ์ดํฐ๋ INSERT ON DUPLICATE KEY UPDATE ๋ฅผ ํตํด ์ ๋ ฅ/์์ ํ ์ ์๋ค.
DELETE
delete_stmt:
time_unit:
delete_stmt ::= 'DELETE FROM' table_name ( 'OLDEST' number 'ROWS' | 'EXCEPT' number ( 'ROWS' | time_unit ) | 'BEFORE' datetime_expression )? 'NO WAIT'? time_unit ::= 'DURATION' number time_unit ( ( 'BEFORE' | 'AFTER' ) number time_unit )?
๋งํฌ๋ฒ ์ด์ค์์์ DELETE BEFORE ๊ตฌ๋ฌธ์ ๋ก๊ทธ ํ ์ด๋ธ, Tag ํ ์ด๋ธ, Rollup table์ ๋ํด์ ์ํ ๊ฐ๋ฅํ๋ค. ์ค๊ฐ์ ์์ ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์ผ๋ฉฐ, ์์์ ์์น๋ถํฐ ์ฐ์์ ์ผ๋ก ๋ง์ง๋ง(๊ฐ์ฅ ์ค๋๋ ๋ก๊ทธ) ๋ ์ฝ๋๊น์ง ์ง์ธ ์ ์๋๋ก ๊ตฌํ๋์๋ค.
์ด๋ ๋ก๊ทธ ๋ฐ์ดํฐ์ ํน์ฑ์ ์ด๋ฆฐ ์ ์ฑ ์ผ๋ก์ ํ๋ฒ ์ ๋ ฅ๋๋ฉด ์์ ์ด ์๊ณ , ๊ณต๊ฐ ํ๋ณด๋ฅผ ์ํด ํ์ผ์ ์ญ์ ํ๋ ํ์๋ฅผ DB ํ์์ผ๋ก ํํํ ๊ฒ์ด๋ค.
DURATION, OLDEST, EXCEPT ๊ตฌ๋ฌธ์ TAG ๋ฐ Rollup ํ ์ด๋ธ์ ๋ํด์๋ ์ฌ์ฉํ ์ ์๋ค.
-- ๋ชจ๋ ์ญ์ ํ๋ผ. DELETE FROM devices; -- ๊ฐ์ฅ ์ค๋๋ ๋ง์ง๋ง N๊ฑด์ ์ญ์ ํ๋ผ. DELETE FROM devices OLDEST N ROWS; -- ์ต๊ทผ N๊ฑด์ ์ ์ธํ๊ณ ๋ชจ๋ ์ญ์ ํ๋ผ. DELETE FROM devices EXCEPT N ROWS; -- ์ง๊ธ๋ถํฐ N์ผ์น๋ฅผ ๋จ๊ธฐ๊ณ ๋ชจ๋ ์ญ์ ํ๋ผ. DELETE FROM devices EXCEPT N DAY; -- 2014๋ 6์ 1์ผ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ๋ผ. DELETE FROM devices BEFORE TO_DATE('2014-06-01', 'YYYY-MM-DD'); -- tag ๋ฐ์ดํฐ์ ์๊ฐ ๊ธฐ์ค ์ญ์ DELETE FROM tag BEFORE TO_DATE('2014-06-01', 'YYYY-MM-DD'); -- tag rollup ๋ฐ์ดํฐ์ ์๊ฐ ๊ธฐ์ค ์ญ์ DELETE FROM tag ROLLUP BEFORE TO_DATE('2014-06-01', 'YYYY-MM-DD');
DELETE WHERE
delete_where_stmt:
delete_where_stmt ::= 'DELETE FROM' table_name 'WHERE' column_name '=' value
create volatile table t1 (i1 int primary key, i2 int); Created successfully. insert into t1 values (2,2); 1 row(s) inserted. delete from t1 where i1 = 2; 1 row(s) deleted.
ํ๋ฐ์ฑ ํ ์ด๋ธ์ ๋ํด์๋ง ์ํ ๊ฐ๋ฅํ ๊ตฌ๋ฌธ์ผ๋ก,ย WHEREย ์ ์ ์์ฑ๋ ์กฐ๊ฑด์ ์ผ์นํ๋ ๋ ์ฝ๋๋ง ์ญ์ ํ ์ ์๋ค.
๊ธฐ๋ณธ ํค๊ฐ ์ง์ ๋ ํ๋ฐ์ฑ ํ ์ด๋ธ์ ๋ํด์๋ง ์ํ ๊ฐ๋ฅํ๋ค.
WHEREย ์ ์๋ (๊ธฐ๋ณธ ํค ์ปฌ๋ผ) = (๊ฐ) ์ ์กฐ๊ฑด๋ง ํ์ฉ๋๋ฉฐ, ๋ค๋ฅธ ์กฐ๊ฑด๊ณผ ํจ๊ป ์์ฑํ ์ ์๋ค.
๊ธฐ๋ณธ ํค ์ปฌ๋ผ์ด ์๋ ๋ค๋ฅธ ์ปฌ๋ผ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์๋ค.
delete_from_tag_where_stmt:
delete_from_tag_where_stmt ::= 'DELETE FROM' table_name 'WHERE' tag_name '=' value ( and tag_time '<' datetime_expression )?
Tag ํ ์ด๋ธ์ ์๋์ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ์์ ์ญ์ ์ฟผ๋ฆฌ๊ฐ, ์ถ๊ฐ์ ์ผ๋ก ์ง์๋๋ค.
- Tag name ๊ธฐ์ค ์ญ์
- Tag name๊ณผ Tag time ๊ธฐ์ค ์ญ์
-- tag name ๊ธฐ์ค ์ญ์ DELETE FROM tag where tag_name = 'my_tag_2021' -- tag name ์ tag time ๊ธฐ์ค ์ญ์ DELETE FROM tag where tag_name = 'my_tag_2021' and tag_time < TO_DATE('2021-07-01', 'YYYY-MM-DD');
- ์ญ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ํ์, ์ญ์ ๋ row๊ฐ ์ ์ฅ๊ณต๊ฐ์์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ญ์ ๋๊ธฐ ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์, DBMS์ ๋์์ํฉ์ ๋ฐ๋ผ์ ๋ค๋ฅผ ์ ์๋ค.
LOAD DATA INFILE
load_data_infile_stmt:
load_data_infile_stmt: 'LOAD DATA INFILE' file_name 'INTO TABLE' table_name ( 'TABLESPACE' tbs_name )? ( 'AUTO' ( 'BULKLOAD' | 'HEADUSE' | 'HEADUSE_ESCAPE' ) )? ( ( 'FIELDS' | 'COLUMNS' ) ( 'TERMINATED BY' char )? ( 'ENCLOSED BY' char )? )? ( 'TRIM' ( 'ON' | 'OFF' ) )? ( 'IGNORE' number ( 'LINES' | 'ROWS' ) )? ( 'MAX_LINE_LENGTH' number )? ( 'ENCODED BY' coding_name )? ( 'ON ERROR' ( 'STOP' | 'IGNORE' ) )?
CSV ํฌ๋งท์ ๋ฐ์ดํฐ ํ์ผ์ ์๋ฒ์์ ์ง์ ์ฝ์ด์, ์ต์ ์ ๋ฐ๋ผ ์๋ฒ์์ ์ง์ ํ ์ด๋ธ ๋ฐ ์ปฌ๋ผ๋ค์ ์์ฑํ์ฌ ์ด๋ฅผ ์ ๋ ฅํ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ฐ ์ต์ ์ ๋ํด์ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ต์ | ์ค๋ช |
---|---|
AUTO mode_string mode_string = (BULKLOAD | HEADUSE | HEADUSE_ESCAPE) | ํด๋น ํ ์ด๋ธ์ ์์ฑํ๊ณ ์ปฌ๋ผ ํ์ (์๋ ์์ฑ์ varchar type) ๋ฐ ์ปฌ๋ผ๋ช ์ ์๋์ผ๋ก ์์ฑํ๋ค. BULKLOAD: ๋ฐ์ดํฐ ํ ๊ฐ์ row๋ฅผ ํ๋์ ์ปฌ๋ผ์ผ๋ก ์ ๋ ฅํ๋ค. ์ปฌ๋ผ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ ๋ฐ์ดํฐ์ ๋ํด์ ์ฌ์ฉํ๋ค. HEADUSE: ๋ฐ์ดํฐ ํ์ผ์ ์ฒซ ๋ฒ์งธ ๋ผ์ธ์ ๊ธฐ์ ๋์ด ์๋ ์ปฌ๋ผ ๋ช ์ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ์ผ๋ก ์ฌ์ฉํ๊ณ , ๊ทธ ๋ผ์ธ์ ๊ธฐ์ ๋ ์ ๋งํผ์ ์ปฌ๋ผ์ ์์ฑํ๋ค. HEADUSE_ESCAPE: HEADUSE ์ต์ ๊ณผ ์ ์ฌํ์ง๋ง, ์ปฌ๋ผ๋ช ์ด DB์ ์์ฝ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ํํผํ๊ธฐ ์ํด ์ปฌ๋ผ๋ช ์ ์๋ค๋ก '_' ๋ฌธ์๋ฅผ ๋ง๋ถ์ด๊ณ , ์ปฌ๋ผ๋ช ์ ํน์๋ฌธ์๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ๋ฌธ์๋ฅผ '_' ๋ฌธ์๋ก ๋ณ๊ฒฝํ๋ค. |
(FIELDS|COLUMNS) TERMINATED BY 'term_char' ESCAPED BY 'escape_char' | ๋ฐ์ดํฐ ๋ผ์ธ์ ํ์ฑํ๊ธฐ ์ํ ๊ตฌ๋ถ ๋ฌธ์(term_char)์ ์ด์ค์ผ์ดํ ๋ฌธ์(escape_char)๋ฅผ ์ง์ ํ๋ค. ์ผ๋ฐ์ ์ธ CSV ํ์ผ์ ๊ฒฝ์ฐ ๊ตฌ๋ถ ๋ฌธ์๋ , ์ด๋ฉฐ ์ด์ค์ผ์ดํ ๋ฌธ์๋ '์ด๋ค. |
ENCODED BY coding_name coding_name = { UTF8(default) | MS949 | KSC5601 | EUCJP | SHIFTJIS | BIG5 | GB231280 } | ๋ฐ์ดํฐ ํ์ผ์ ์ธ์ฝ๋ฉ ์ต์ ์ ์ง์ ํ๋ค. ๊ธฐ๋ณธ ๊ฐ์ UTF-8์ด๋ค. |
TRIM (ON | OFF) | ์ปฌ๋ผ์ ๋น ๊ณต๊ฐ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ ์งํ๋ค. ๊ธฐ๋ณธ๊ฐ์ ON์ด๋ค. |
IGNORE number (LINES | ROWS) | ์ซ์๋ก ์ง์ ๋ ๋ผ์ธ ๋๋ ํ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌด์ํ๋ค. CSV ํฌ๋งท ํ์ผ์ ํค๋ ๋ฑ์ ๋ฌด์ํ๊ฑฐ๋ VCF ํค๋๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค. |
MAX_LINE_LENGTH | ํ ๋ผ์ธ์ ์ต๋ ๊ธธ์ด๋ฅผ ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ 512K์ด๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ ํฐ ๊ฒฝ์ฐ์๋ ๋ ํฐ ๊ฐ์ ์ง์ ํ ์ ์๋ค. |
ON ERROR (STOP | IGNORE) | ์ ๋ ฅ ๋์ค ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ํํ ๋์์ ์ง์ ํ๋ค. STOP์ธ ๊ฒฝ์ฐ ์ ๋ ฅ์ ์ค๋จํ๊ณ IGNORE์ธ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๋ผ์ธ์ ๊ฑด๋๋ฐ๊ณ ๊ณ์ ์ ๋ ฅํ๋ค. ๊ธฐ๋ณธ๊ฐ์ IGNORE์ด๋ค. |
-- default field delimiter(,) field encloser (") ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ค. LOAD DATA INFILE '/tmp/aaa.csv' INTO TABLE Sample_data ; -- ํ๋์ ์ปฌ๋ผ์ ๊ฐ๋ NEWTABLE์ ์์ฑํด์ ํ ๋ผ์ธ์ ํ ์ปฌ๋ผ์ผ๋ก ์ ๋ ฅํ๋ค. LOAD DATA INFILE '/tmp/bbb.csv' INTO TABLE NEWTABLE AUTO BULKLOAD; -- csv์ ์ฒซ๋ฒ์งธ ๋ผ์ธ์ ์ปฌ๋ผ ์ ๋ณด๋ก ์ด์ฉํ์ฌ NEWTABLE์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ทธ ํ ์ด๋ธ์ ์ ๋ ฅํ๋ค. LOAD DATA INFILE '/tmp/bbb.csv' INTO TABLE NEWTABLE AUTO HEADUSE; -- ์ฒซ๋ฒ์งธ ๋ผ์ธ์ ๋ฌด์ํ๊ณ ํ๋ ๊ตฌ๋ถ์๋ ; enclosing ๋ฌธ์๋ ' ๋ก ์ง์ ํด์ ์ ๋ ฅํ๋ค. LOAD DATA INFILE '/tmp/ccc.csv' INTO TABLE Sample_data FIELDS TERMINATED BY ';' ENCLOSED BY '\'' IGNORE 1 LINES ON ERROR IGNORE;
AUTO ์ต์ ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ VARCHAR ๋๋ TEXT ํ์ ์ผ๋ก ์์ฑํด์ผ ํ๋ค.