[SQL] DDL, DML
Categories: Database
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
DBMS(Database management system)
: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ํํธ์จ์ด ์์คํ
- ๋ฐ์ดํฐ ์ ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ฑ, ์์ , ์ญ์ ํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์กฐ์: ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ๋ฐ ๊ฒ์ํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ณด์: ๋ฐ์ดํฐ ์ ๊ทผ ๊ถํ์ ๊ด๋ฆฌํ์ฌ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ณดํธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์ผ๊ด์ฑ์ด ์ ์ง๋๋๋ก ํฉ๋๋ค.
- ํธ๋์ญ์ ๊ด๋ฆฌ: ์ฌ๋ฌ ์์ ์ด ๋์์ ์ํ๋ ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ์์คํ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
โ๏ธDatabase์ ์ฌ์ฉํ๋ ์ฃผ์ ๋ฐ์ดํฐํ์ ์ ์ ๋ณด
๋ฐ์ดํฐ ํ์ | ์ค๋ช | ์์ |
---|---|---|
CHAR(n) | ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด (n: 1~255 generally) | CHAR(10) |
VARCHAR(n) | ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด (n: 1~์ฌ๋ฌ ์์คํ ์์ ๋ค์) | VARCHAR(50) |
DECIMAL(p, s) | ์ ๋ฐํ ๊ณ ์ ์์์ ์ซ์ (p: ์ ๋ฐ๋, s: ์์์ ์๋ฆฟ์) | DECIMAL(10, 2) |
DATE | ๋ ์ง (์ฐ, ์, ์ผ) | DATE |
TIMESTAMP | ๋ ์ง์ ์๊ฐ (๋ถ ๋จ์ ๋๋ ๋๋ ธ์ด ์ ๋ฐ๋๊น์ง) | TIMESTAMP |
BINARY LARGE OBJECT (BLOB) | ํฐ ์ด์ง ๋ฐ์ดํฐ (ํฌ๊ธฐ ์ ํ์ ์์คํ ์ ๋ฐ๋ผ ๋ค๋ฆ) | BLOB |
CHARACTER LARGE OBJECT (CLOB) | ํฐ ํ ์คํธ ๋ฐ์ดํฐ (ํฌ๊ธฐ ์ ํ์ ์์คํ ์ ๋ฐ๋ผ ๋ค๋ฆ) | CLOB |
โ
-
๋ถ๊ฐ ์ค๋ช
CHAR(10) - 10๊ฐ๊ฐ ๊ณ ์ ์ด๋ผ์ ๊ณ ์์ด 3๊ฐ๊ฐ ๋ค์ด๊ฐ๋ฉด 7๊ฐ๋ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์.
๋ณดํต VARCHAR(50) ๋ง์ด ์ฌ์ฉ, ๋ฌธ์ 50๊ฐ๊น์ง ์ฌ์ฉ ๊ฐ๋ฅ, ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ด๋ผ์ ๊ณ ์์ด 3๊ฐ ๋ค์ด๊ฐ๋ฉด 3๊ฐ์ ๊ธธ์ด๋ง ๊ฐ์ง
๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์ผ์ ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ VARCHAR ๋ง์ด ์ฌ์ฉ(๊ธธ์ด๋ฅผ ๋๋ ธ๋ค๊ฐ ์ค์ด๋ ๋์ ์ ๋ณด์ด๋ ์ญํ ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ ์ ์์
ํญ์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ๋๋ CHAR๊ฐ ๋ ์ข์
= ๊ทธ ์๋ก ํนํ ํด๋ํฐ ๋ฒํธ, ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ : ํด์ํจ์ ์ฌ์ฉํด์ ์ํธํ๋๋๋ฐ ๊ธธ์ด๋ ๋์ผํจ.
ํ ์คํธ ์ ์ธ ๋ชจ๋ ๊ฒ์ BINARY LARGE OBJECT๋ก ํ ์คํธ๋ CLOB๋ก ์ ์ฅ.
์ ์๋ Int๋ long ๋์ ์ bigInt (tinyInt, smallInt ์๋๋ฐ ๊ฑฐ์ ์ฌ์ฉํ ์ผ ์์)
-
ORM
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด ORM
: โORM(Object Relational Mapping)โ์ โ๊ฐ์ฒด๋ก ์ฐ๊ฒฐ์ ํด์ค๋คโ๋ ์๋ฏธ๋ก, ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ SQL์ธ์ด๊ฐ ์๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ธ์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ํด
JPA - ์ํฐํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ฌ์ฉํด์ ์คํ๋ง์์ ์ฌ์ฉ
JPA(Java Persistence API)
- Java ์ง์์์ ORM(Object-Relational Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ๋ชจ์
- ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค
- ์ธํฐํ์ด์ค ์ด๊ธฐ ๋๋ฌธ์ Hibernate, OpenJPA ๋ฑ์ด JPA๋ฅผ ๊ตฌํํจ
ํ์ฌ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ ๋ชจ๋ ํ ์ด๋ธ ์ ๋ณด๋ฅผ ๋ณด๊ธฐ ์ํ ๋ช ๋ น์ด : SHOW TABLES; Usersํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ธฐ์ํ SQL ๋ช ๋ น์ด : DSEC Users; (DSEC =DESCRIBE์ ์ฝ์ด)
SQL (Structured Query Language)
: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์์ ๋ฐ์ดํฐ๋ฅผ ์ ์, ์กฐ์, ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ์คํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
๊ณ ์์ค์ธ์ด(์ธ๊ฐ์ด ์ดํดํ๊ธฐ ์ฌ์ด ์ธ์ด)๋ผ ํจ , โ์ ์์ค์ธ์ด(์ปดํจํฐ๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ์ธ์ด)
- โจโจ
DDL (Data Definition Language)
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ํ๊ธฐ ์ํ ๋ช ๋ น์ด- ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ง์ฐ๊ฑฐ๋ ํ๋ ์ญํ
- โจโจ
DML (Data Manipulation Language)
: ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ฝ์ , ์์ , ์ญ์ ํ๊ธฐ ์ํ ๋ช ๋ น์ด- ์ค์ ๋ฐ์ดํฐ๋ฅผ CRUDํ ๋ ์ฌ์ฉ
- DCL (Data Control Language): ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์ ๊ถํ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ค
- TCL (Transaction Control Language): ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ช
๋ น์ด
์คํ๋ง์์ ํ ๊ฒ. transaction์ด ๋ญ์ง๋ ์์์ผ ๋จ. - ACID ํน์ง์ ๊ฐ์ง
- Transaction : ์ฌ๋ฌ๊ฐ์ ์์ ์ ํ๋๋ก ๋ฌถ์ ์คํ ์ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด์ ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ํ๋ ์ด์์ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ์ ๋์ ํ๋์ ์์ ๋จ์
- ย ์ง์(query)๋ฅผ ํ๋์ ๋ฌถ์ ์ฒ๋ฆฌํด์ ์ค๊ฐ์ย ์คํ์ดย ์ค๋จ๋์ ๊ฒฝ์ฐ, ์ฒ์๋ถํฐ ๋ค์ ์คํํ๋ย Rollback์ ์ํํ๊ณ ,ย ์ค๋ฅ์์ด ์คํ์ ๋ง์น๋ฉดย commit์ ํ๋ย ์คํ ๋จ์๋ฅผ ์๋ฏธ
- ์์ธํ๊ฑด ์ฌ๊ธฐ์ >[DB] ํธ๋์ญ์ (Transaction)์ ๋ํด์ ์์๋ณด์. (tistory.com)
SQL์ ๋ํ ๋ช ๋ น์ด
์ข ๋ฅ | ์ค๋ช | ๋ํ ๋ช ๋ น์ด |
---|---|---|
DDL | ๋ฐ์ดํฐ ์ ์ ์ธ์ด | CREATE, ALTER, DROP, RENAME, TRUNCATE |
DML | ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด | SELECT, INSERT, UPDATE, DELETE |
DCL | ๋ฐ์ดํฐ ์ ์ด ์ธ์ด | GRANT, REVOKE |
TCL | ํธ๋์ญ์ ์ ์ด ์ธ์ด | COMMIT, ROLLBACK, SAVEPOINT |
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฐ๋
- ํ : ๊ฐ๋ณ ๋ ์ฝ๋๋ฅผ ๋ํ๋, ํ ํ์ ํ ์ด๋ธ์ ๋ชจ๋ ์ด์ ๋ํ ๊ฐ์ ํฌํจ
- ์ด : ํ ์ด๋ธ์์ ํน์ ์์ฑ์ ๋ํ๋
- โจ
๊ธฐ๋ณธํค
: ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ ธ์ผ ํจ = ์ค๋ณต๋ถ๊ฐ = Null ๋ถ๊ฐ = UNIQUE - โจ
์ธ๋ํค
: ๋ด๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ๊ฐ์ ธ์ด
SQL์์๋ MUL์ด ์ธ๋ ํค, ๋ค๋ฅธ๊ณณ์์ ์ฐธ๊ณ ํด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ป
DDL(Data Definition Language)
CREATE TABLE๋ฌธ
ํ ์ด๋ธ ์ด๋ฆ ์์ฑ ๊ท์น
- ์ ํจํ ๋ฌธ์ ์ฌ์ฉ: ํ ์ด๋ธ ์ด๋ฆ์ ์ํ๋ฒณ, ์ซ์, ๋ฐ์ค(_)๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ํน์ ๋ฌธ์๋ ๊ณต๋ฐฑ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ฒซ ๊ธ์: ํ ์ด๋ธ ์ด๋ฆ์ ์ํ๋ฒณ ๋ฌธ์๋ก ์์ํด์ผ ํฉ๋๋ค. ์ซ์๋ ๋ฐ์ค๋ก ์์ํ๋ ์ด๋ฆ์ ํผํ์ธ์.
- ๊ธธ์ด ์ ํ: ์ผ๋ฐ์ ์ผ๋ก 30์ ์ด๋ด์ ๊ธธ์ด๋ก ์ ํ
- ์๋ฏธ ์๋ ์ด๋ฆ ์ฌ์ฉ: ์ถ์ฝ์ดX
- ๋จ์/๋ณต์ํ ์ผ๊ด์ฑ: ํ
์ด๋ธ ์ด๋ฆ์ ๋จ์ํ ๋๋ ๋ณต์ํ์ ์ฌ์ฉํ ๋ ์ผ๊ด์ฑ์ ์ ์ง
- ์ํฐํฐ๋ ๋จ์
-
์์ฝ์ด ํผํ๊ธฐ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์ฌ์ฉํ๋ ์์ฝ์ด๋ฅผ ํ ์ด๋ธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ฉด SQL ์ฟผ๋ฆฌ ์์ฑ ์ ํผ๋์ ์ด๋ํ ์ ์์ต๋๋ค.
ํ ์ด๋ธ ์ด๋ฆ์ ๋ง๋ค ๋ ์์ ๊ท์น๊ณผ ๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ฅด๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ์ดํดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์,
ํ ๋ด์์ ์ผ๊ด๋ ๋ช ๋ช ๊ท์น์ ์ ์งํ๋ ๊ฒ์ด ์ค์
์ ์ฝ์กฐ๊ฑด (constraints)
-
์์ฑ์ ์ ์ฝ์กฐ๊ฑด ๊ฑธ ์ ์์.
์ ์ฝ์กฐ๊ฑด ์ค๋ช ์์ PRIMARY KEY ํ ์ด๋ธ์ ๊ฐ ํ์ ์ ์ผํ๊ฒ ์๋ณํ๋ ์ด ๋๋ ์ด์ ์กฐํฉ PRIMARY KEY (id) UNIQUE ์ง์ ๋ ์ด์ ๋ชจ๋ ๊ฐ์ด ์๋ก ๋ค๋ฅด๊ฒ ์ ์ง๋์ด์ผ ํจ์ ๋ณด์ฅ UNIQUE (email) FOREIGN KEY ํ๋์ ํ ์ด๋ธ์ ์๋ ์ด์ด ๋ค๋ฅธ ํ ์ด๋ธ์ PRIMARY KEY๋ฅผ ์ฐธ์กฐํจ์ผ๋ก์จ ์ธ๋ ํค ๊ด๊ณ ์ค์ FOREIGN KEY (department_id) REFERENCES ย ย departments(department_id) ย ย NOT NULL ์ด์ ๊ฐ์ด ์ ๋ NULL์ด ์๋์ด์ผ ํจ ย ์ ๋ ๋น์ด์์ผ๋ฉด ์๋จ. NOT NULL ย -
์์> ํ ์ด๋ธ ์์ฑ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
CREATE TABLE Users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE ); -- ์ถํ์ฌ ํ ์ด๋ธ CREATE TABLE Publishers ( publisher_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address TEXT ); -- ๋์ ํ ์ด๋ธ CREATE TABLE Books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, publication_date DATE, publisher_id INT, FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) ); -- ์ ์ ํ ์ด๋ธ CREATE TABLE Authors ( author_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- ๋์ถ ๊ธฐ๋ก ํ ์ด๋ธ CREATE TABLE LoanRecords ( record_id INT AUTO_INCREMENT PRIMARY KEY, book_id INT, user_id INT, loan_date DATE, return_date DATE, FOREIGN KEY (book_id) REFERENCES Books(book_id), FOREIGN KEY (user_id) REFERENCES Users(user_id) ); -- ๋์์ ์ ์์ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ์ํ ํ ์ด๋ธ CREATE TABLE Book_Authors ( book_id INT, author_id INT, PRIMARY KEY (book_id, author_id), FOREIGN KEY (book_id) REFERENCES Books(book_id), FOREIGN KEY (author_id) REFERENCES Authors(author_id) );
ON DELETE ์ต์ : Cascading/Restrict/Set Null
On Delete ์ต์ ์ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ(Integrity)์ ๋ณด์ฅ
-
Cascading :์ฐธ์กฐํค์ ๊ธฐ๋ณธํค๋ฅผ ์ง์ฐ๋ฉด ์ฐธ์กฐํ๊ณ ์๋ ๋ค๋ฅธ ์ํฐํฐ์ ์ธ๋ ํค๋ฅผ ๋ค ์ง์ฐ๋ ๊ฒ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- ์ถํ์ฌ ํ ์ด๋ธ CREATE TABLE Publishers ( publisher_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address TEXT ); -- ๋์ ํ ์ด๋ธ CREATE TABLE Books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, publication_date DATE, publisher_id INT, FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) **ON DELETE CASCADE** );
- ์ ์์ ์ฝ๋์์ publisher_id ์ปฌ๋ผ์ Publishers ํ ์ด๋ธ์ publisher_id ์ปฌ๋ผ์ ์ฐธ์กฐํ๋ ์ธ๋ ํค(Foreign Key)
- ON DELETE CASCADE ์ต์ ์ด ์ค์ ๋์ด ์์ผ๋ฏ๋ก Publishers ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ์ญ์ ๋ ๋ ํด๋น publisher_id๋ฅผ ์ฐธ์กฐํ๋ Books ํ ์ด๋ธ์ ๋ ์ฝ๋๋ ํจ๊ป ์ญ์
-
Restrict : ์ฐธ์กฐ๋ ๋ ์ฝ๋๊ฐ ์ญ์ ๋ ๋ ํด๋น ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ์ง ์์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- ์ถํ์ฌ ํ ์ด๋ธ CREATE TABLE Publishers ( publisher_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address TEXT ); -- ๋์ ํ ์ด๋ธ CREATE TABLE Books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, publication_date DATE, publisher_id INT, FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) **ON DELETE RESTRICT** );
-
Set Null : ์ฐธ์กฐ๋ ๋ ์ฝ๋๊ฐ ์ญ์ ๋ ๋ ํด๋น ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ ์ฝ๋์ ์ปฌ๋ผ ๊ฐ์ Null๋ก ์ค์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- ์ถํ์ฌ ํ ์ด๋ธ CREATE TABLE Publishers ( publisher_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address TEXT ); -- ๋์ ํ ์ด๋ธ CREATE TABLE Books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, publication_date DATE, publisher_id INT NULL, -- publisher_id ์นผ๋ผ์ด NULL์ ํ์ฉํ๋๋ก ์ค์ FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) **ON DELETE SET NULL );**
cascade ์์ ํ์ด๋ณด๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- ์ถํ์ฌ ํ
์ด๋ธ
CREATE TABLE Publishers (
publisher_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address TEXT
);
-- ๋์ ํ
์ด๋ธ
CREATE TABLE Books (
book_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
publication_date DATE,
publisher_id INT,
FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) ON DELETE CASCADE
);
INSERT INTO Publishers (name, address) VALUES ('Alpha Publishing', '123 Alpha St, New York, NY');
INSERT INTO Publishers (name, address) VALUES ('Beta Books', '234 Beta Rd, San Francisco, CA');
INSERT INTO Publishers (name, address) VALUES ('Gamma Press', '345 Gamma Blvd, Chicago, IL');
INSERT INTO Publishers (name, address) VALUES ('Delta Media', '456 Delta Ave, Los Angeles, CA');
INSERT INTO Publishers (name, address) VALUES ('Epsilon Publications', '567 Epsilon Way, Houston, TX');
INSERT INTO Publishers (name, address) VALUES ('Zeta Publishing House', '678 Zeta St, Phoenix, AZ');
INSERT INTO Publishers (name, address) VALUES ('Eta Publishing Group', '789 Eta Rd, Philadelphia, PA');
INSERT INTO Publishers (name, address) VALUES ('Theta Books', '890 Theta Blvd, San Antonio, TX');
INSERT INTO Publishers (name, address) VALUES ('Iota Press', '901 Iota Ave, San Diego, CA');
INSERT INTO Publishers (name, address) VALUES ('Kappa Media', '101 Kappa Way, Dallas, TX');
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Introduction to AI', '2022-01-15', 1);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Advanced SQL', '2022-02-20', 2);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Learning Python', '2023-03-25', 3);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Web Development', '2021-04-30', 4);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Cloud Computing Basics', '2023-05-05', 5);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Data Structures', '2021-06-10', 6);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Operating Systems', '2022-07-15', 7);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Network Security', '2021-08-20', 8);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Mobile App Development', '2022-09-25', 9);
INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Machine Learning for Beginners', '2023-10-30', 10);
- ์ฟผ๋ฆฌ๋ฌธ์ ์์๊ฐ ๋ฌด์กฐ๊ฑด ์ค์ !!!
- ์๋ถํฐ ์คํํ๋๋ฐ ํ ์ด๋ธ์ ๋จผ์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ผ ํ๋ฉฐ
- Book์ด publisher๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฏ๋ก book์ ๊ฐ์ฅ ๋จผ์ ๋ง๋ค์ด์ผ ํจ.
- casacade๋ ์ถํ์ฌ ๋ฐ์ดํฐ์์ 10๋ฒ์ ์ง์ธ ๊ฒฝ์ฐ book์ด ์ฐธ์กฐํ๊ณ ์๋ 10๋ฒ์ ๋ฐ์ดํฐ๋ ์ง์์ง.
- 10๋ฒ ํด๋ฆญ, ๋ง์ฐ์ค์ค๋ฅธ์ชฝ- Edit - ๋ก์ฐ ์ญ์ ๋ฅผ ๋๋ฌ 10๋ฒ์ ์ญ์ ํ ์๋ Save ๋ฒํผ ๋๋ฌ์ค๋ค. (๊ทธ๋ฅ Deleteํ๊ณ SAVE ๋๋ฌ๋ ๋จ)
- ์๋ก๊ณ ์นจ ๋๋ฅด๋ฉด books์ publishers ๋ชจ๋ 10๋ฒ์ด ์ญ์ ๋์ด ์์
ALTER๋ฌธ: ALTER TABLE/ALTER INDEX
- ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๊ฐ์ฒด๋ฅผ ์์
ํ๋๋ฐ ์ฌ์ฉ - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์ ์ ๋ฐ์ดํธ ๋ฐ ์์ ๊ฐ๋ฅ
- ALTER ๋ฌธ์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ, ์ธ๋ฑ์ค, ์ํ์ค, ๋ทฐ ๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ๊ฐ๋ฅ
- ALTER ๋ฌธ์ ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
- ํ ์ด๋ธ์ ์ด ์ถ๊ฐ, ์์ , ์ญ์ ํ๊ธฐ
- ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ, ์์ , ์ญ์ ํ๊ธฐ
- ์ธ๋ฑ์ค ์ํ ๋ณ๊ฒฝํ๊ธฐ (ํ์ฑํ ๋๋ ๋นํ์ฑํ)
- ์ํ์ค์ ์์๊ฐ, ์ฆ๊ฐ๊ฐ, ์ต๋๊ฐ ๋ฑ ๋ณ๊ฒฝํ๊ธฐ
- ๋ทฐ ์ ์ ๋ณ๊ฒฝํ๊ธฐ
- ALTER TABLE - ๊ธฐ์กด ํ ์ด๋ธ ์์ : ์ด ์ถ๊ฐ , ์ด ์ญ์ , ์ด ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ, ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐ/์ญ์ /์์ ๋ฑ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-- ์ด ์ถ๊ฐ ALTER TABLE Users ADD phone_number VARCHAR(20) NOT NULL; -- ์ด ์ญ์ ALTER TABLE Books DROP COLUMN publication_date; -- ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ALTER TABLE Authors MODIFY name TEXT NOT NULL; -- ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ ALTER TABLE Users **ADD CONSTRAINT** unique_username UNIQUE (username); //์ ์ฝ์กฐ๊ฑด(unique) ์ถ๊ฐ ALTER TABLE Users **DROP CONSTRAINT** unique_username; //์ ์ฝ์กฐ๊ฑด(unique) ์ญ์ -- ์ ์ฝ ์กฐ๊ฑด ์ญ์ ALTER TABLE Books DROP FOREIGN KEY fk_publisher_id;
-
ALTER INDEX - ๊ธฐ์กด ์ธ๋ฑ์ค ์์
1 2 3 4 5 6 7 8 9
-- ์ธ๋ฑ์ค ๋นํ์ฑํ ALTER TABLE Books DISABLE INDEX idx_title; -- ์ธ๋ฑ์ค ํ์ฑํ ALTER TABLE Books ENABLE INDEX idx_title;
DROP TABLE, TRUNCATE TABLE, RENAME
-
DROP TABLE : ํ ์ด๋ธ์ ์์ ํ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ
1
DROP TABLE Books;
-
RENAME : ํ ์ด๋ธ์ ์ด๋ฆ์ ๋ณ๊ฒฝ, ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
1
RENAME Table Books TO Book;
ํ๋ฒ์ ๋ฐ๊ฟ ์ ์์.
-
TRUNCATE TABLE : ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ญ์ , ํ ์ด๋ธ์ ๊ตฌ์กฐ, ์ธ๋ฑ์ค, ์ ์ฝ ์กฐ๊ฑด ๋ฑ์ ๊ทธ๋๋ก ์ ์ง
1
TRUNCATE TABLE Books;
-
์ณ๋ณด๊ธฐ~!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
์ถํ์ฌ ํ ์ด๋ธ CREATE TABLE Publishers ( publisher_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address TEXT ); -- ๋์ ํ ์ด๋ธ CREATE TABLE Books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, publication_date DATE, publisher_id INT, FOREIGN KEY (publisher_id) REFERENCES Publishers(publisher_id) ); INSERT INTO Publishers (name, address) VALUES ('Alpha Publishing', '123 Alpha St, New York, NY'); INSERT INTO Publishers (name, address) VALUES ('Beta Books', '234 Beta Rd, San Francisco, CA'); INSERT INTO Publishers (name, address) VALUES ('Gamma Press', '345 Gamma Blvd, Chicago, IL'); INSERT INTO Publishers (name, address) VALUES ('Delta Media', '456 Delta Ave, Los Angeles, CA'); INSERT INTO Publishers (name, address) VALUES ('Epsilon Publications', '567 Epsilon Way, Houston, TX'); INSERT INTO Publishers (name, address) VALUES ('Zeta Publishing House', '678 Zeta St, Phoenix, AZ'); INSERT INTO Publishers (name, address) VALUES ('Eta Publishing Group', '789 Eta Rd, Philadelphia, PA'); INSERT INTO Publishers (name, address) VALUES ('Theta Books', '890 Theta Blvd, San Antonio, TX'); INSERT INTO Publishers (name, address) VALUES ('Iota Press', '901 Iota Ave, San Diego, CA'); INSERT INTO Publishers (name, address) VALUES ('Kappa Media', '101 Kappa Way, Dallas, TX'); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Introduction to AI', '2022-01-15', 1); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Advanced SQL', '2022-02-20', 2); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Learning Python', '2023-03-25', 3); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Web Development', '2021-04-30', 4); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Cloud Computing Basics', '2023-05-05', 5); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Data Structures', '2021-06-10', 6); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Operating Systems', '2022-07-15', 7); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Network Security', '2021-08-20', 8); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Mobile App Development', '2022-09-25', 9); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('Machine Learning for Beginners', '2023-10-30', 10); //์๊ธฐ ์ฝ๋ ๋ชจ๋ ์์ฑ ํ ๋ฐ๋ก ์คํ TRUNCATE TABLE Books;
-
-
DROP TABLE๊ณผ TRUNCATE TABLE์ ์ฐจ์ด์
-
๋ณต๊ตฌ ๊ฐ๋ฅ์ฑ: DROP TABLE์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์ ํ๋ฏ๋ก ๋ณต๊ตฌํ ์ ์์.
TRUNCATE TABLE์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ง ์ญ์ ํ๋ฏ๋ก ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ์ํฅ ๋ฐ๋ ๊ฐ์ฒด: DROP TABLE์ ํ ์ด๋ธ๊ณผ ๊ด๋ จ๋ ์ธ๋ฑ์ค, ์ ์ฝ ์กฐ๊ฑด, ํธ๋ฆฌ๊ฑฐ, ๊ถํ ๋ฑ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค. TRUNCATE TABLE์ ์ค์ง ๋ฐ์ดํฐ๋ง ์ญ์ ํ๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ ๊ทธ๋๋ก ๋ก๋๋ค.
- ์๋: TRUNCATE TABLE์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ญ์ ํ๋ ๋ฐ ๋ฐํด, DROP TABLE์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์ ํ๋ฏ๋ก ์๊ฐ์ด ๋ค์ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ํธ๋์ญ์ ๋ฐ ๋กค๋ฐฑ: TRUNCATE TABLE์ ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋กค๋ฐฑ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ฉด, DROP TABLE์ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ฉฐ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํฉ๋๋ค(๋จ, ์ค๋ผํด์์๋ ๋กค๋ฐฑ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค).
- ์ฉ๋: DROP TABLE์ ํ ์ด๋ธ์ ์์ ํ ์ ๊ฑฐํ ๋ ์ฌ์ฉ๋๋ฉฐ, TRUNCATE TABLE์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ง ๋น ๋ฅด๊ฒ ์ญ์ ํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-
DML(Data Manipulation Language):
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ SQL ๊ตฌ๋ฌธ์ ํ ๋ถ๋ถ
DML์ ์ฃผ์๊ตฌ๋ฌธ SELECT, INSERT, UPDATE, DELETE
SELECT
-
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ(๊ฒ์)ํ๋ ๋ฐ ์ฌ์ฉ
-
ํน์ ํ ์ด๋ธ์์ ์ํ๋ ์ด(column)๊ณผ ํ(row)์ ์ ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
1 2 3 4 5 6 7 8 9
SELECT username, email FROM Users; --๋ชจ๋ ์ ์์ ์ด๋ฆ ์ถ๋ ฅ: SELECT name FROM Authors; --๋ชจ๋ ๋์ถ ๊ธฐ๋ก์ ๋์ถ ๋ ์ง์ ๋ฐ๋ฉ ์์ ๋ ์ง ์ถ๋ ฅ SELECT loan_date, return_date FROM LoanRecords;
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ๊ณผ DISTINCT
, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์ ||
, ๊ทธ๋ฆฌ๊ณ ๋ณ์นญ(alias) ์ง์
-
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1
SELECT column_name1, column_name2, ... FROM table_name;
- DISTINCT
DISTINCT
ํค์๋๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๊ณ ์ ํ ๊ฐ๋ง ์กฐํํ๋ ค๋ ๊ฒฝ์ฐ
1 2 3 4
SELECT DISTINCT column_name FROM table_name; //์๋ฅผ ๋ค์ด **Authors**ํ ์ด๋ธ์์ ๊ณ ์ ํ ๊ฐ๋ง ์กฐํ //SELECT DISTINCT name FROM Authors;
-
๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์
||
:||
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ฐ๊ฒฐ1 2 3
SELECT column_name1 || ' ' || column_name2 AS new_column_name FROM table_name;
- ๋ณ์นญ์ง์ (alias)
-
SELECT
๋ฌธ์์ ๋ณ์นญ(alias)์ ์ฌ์ฉํ๋ฉด ์ด ์ด๋ฆ์ด๋ ํํ์์ ๋ค๋ฅธ ์ด๋ฆ์ ์ง์ ๊ฐ๋ฅ1 2
SELECT column_name AS alias_name FROM table_name;
-
Users
ํ ์ด๋ธ์์username
์ด์์ด๋ฆ
์ด๋ผ๋ ๋ณ์นญ์ผ๋ก ์กฐํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑ1 2 3 4
SELECT username AS ์ด๋ฆ FROM Users; SELECT username AS un FROM Users;
-
INSERT
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--์ฌ์ฉ์ ํ
์ด๋ธ์ ์๋ก์ด ์ฌ์ฉ์ ์ถ๊ฐ:
INSERT INTO Users (username, email)
VALUES ('alice', 'alice@example.com');
--์ถํ์ฌ ํ
์ด๋ธ์ ์๋ก์ด ์ถํ์ฌ ์ถ๊ฐ:
INSERT INTO Publishers (name, address)
VALUES ('ABC Publishing', '123 Main Street');
--๋์ ํ
์ด๋ธ์ ์๋ก์ด ๋์ ์ถ๊ฐ:
INSERT INTO Books (title, publication_date, publisher_id)
VALUES ('The Book Thief', '2005-11-01', 1);
--์ ์ ํ
์ด๋ธ์ ์๋ก์ด ์ ์ ์ถ๊ฐ:
INSERT INTO Authors (name)
VALUES ('Markus Zusak');
ํน์ ํ ์ด๋ธ์ ํ(row)์ ๊ฐ์ ์ง์ ํ์ฌ ์ฝ์ ๊ฐ๋ฅ- ๋จ์ผ ํ ์ฝ์ ๋ฐ ๋ค์ค ํ ์ฝ์ .
-
๋จ์ผ ํ ์ฝ์
1 2 3 4 5 6
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); //**able_name**์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ค๋ ํ ์ด๋ธ์ ์ด๋ฆ์ด๊ณ , //**column1, column2, column3, ...**์ ๊ฐ์ ์ฝ์ ํ๋ ค๋ ํ ์ด๋ธ์ ์ด(column) //**value1, value2, value3, ...**์ ํด๋น ์ด์ ์ฝ์ ํ ๊ฐ
์์
1 2 3
--๋์ ํ ์ด๋ธ์ ์๋ก์ด ๋์ ์ถ๊ฐ: INSERT INTO Books (title, publication_date, publisher_id) VALUES ('The Book Thief', '2005-11-01', 1);
- ๋ค์ค ํ ์ฝ์
- ํ ๋ฒ์ ์ฌ๋ฌ ํ์ ํ ์ด๋ธ์ ์ฝ์
- ํ ์ด๋ธ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋ ํจ์จ์ ์ ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
INSERT INTO Users (username, email) VALUES ('kimlucky', 'kimlucky@example.com'), ('vanilla', 'vanilla@example.com'), ('kimlatte', 'kimlatte@example.com'); INSERT INTO Publishers (name, address) VALUES ('ABC Publishing', '123 Main Street'), ('DEF Press', '456 Elm Street'); INSERT INTO Books (title, publication_date, publisher_id) VALUES ('The Book Thief', '2005-11-01', 1), ('Pride and Prejudice', '1813-01-28', 2); INSERT INTO Authors (name) VALUES ('Markus Zusak'), ('Jane Austen'); INSERT INTO LoanRecords (book_id, user_id, loan_date) VALUES (1, 1, '2024-04-30'), (2, 2, '2024-04-29'); INSERT INTO Book_Authors (book_id, author_id) VALUES (1, 1), (2, 2);
- INSERT INTO SELECT
-
๋ค๋ฅธ ํ ์ด๋ธ์์ ์ ํํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ
1 2 3 4
INSERT INTO table_name1 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table_name2 WHERE condition;
-
์์
1 2 3 4 5 6 7 8 9 10 11
-- ๋ชจ๋ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ์ 'New Users' ํ ์ด๋ธ์ ๋ณต์ฌ: CREATE TABLE NewUsers ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE ); INSERT INTO NewUsers (username, email) SELECT username, email FROM Users;
-
๊ฒฐ๊ณผ
Users
โ
Newusers
โ
-
-
์ฃผ์์ฌํญ
-
NOT NULL ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์๋ NULL ๊ฐ์ ์ฝ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋์ ๊ฐ์ ์ ๊ณตํด์ผ ํจ
-
๊ธฐ๋ณธ ํค(primary key) ๋๋ ๊ณ ์ ํค(unique key) ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์ ์ค๋ณต ๊ฐ์ ์ฝ์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
-
์ธ๋ ํค(foreign key) ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์ ์กด์ฌํ์ง ์๋ ์ฐธ์กฐ ๊ฐ์ ์ฝ์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
-
-
UPDATE
UPDATE๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ
ํน์ ํ ์ด๋ธ์์ ํ(row)๊ณผ ์ด(column)์ ์ ํํ์ฌ ๊ฐ์ ๋ณ๊ฒฝ
1
2
3
4
5
6
7
8
9
//๊ธฐ๋ณธ๊ตฌ๋ฌธ
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
//**table_name**์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๋ ํ
์ด๋ธ์ ์ด๋ฆ์ด๊ณ ,
**column1, column2, ...**์ ๊ฐ์ ์์ ํ๋ ค๋ ํ
์ด๋ธ์ ์ด(column)
**value1, value2, ...**์ ํด๋น ์ด์ ์์ ํ ๊ฐ
๋ง์ง๋ง์ผ๋ก **condition**์ ํน์ ํ์ ์ ํํ๋ ์กฐ๊ฑด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--ํน์ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ๋ณ๊ฒฝ:
UPDATE Users
SET email = 'newemail@example.com'
WHERE user_id = 1;
--ํน์ ๋์์ ์ถํ ๋ ์ง ๋ณ๊ฒฝ:
UPDATE Books
SET publication_date = '2006-01-01'
WHERE book_id = 1;
-- ๋ชจ๋ ๋์ถ ๊ธฐ๋ก์ ๋ฐ๋ฉ ๋ ์ง๋ฅผ ํ์ฌ ๋ ์ง๋ก ๋ณ๊ฒฝ:
UPDATE LoanRecords
SET return_date = CURRENT_DATE;
์ฃผ์์ฌํญ
-
WHERE ์ ์ ์ฌ์ฉํ์ฌ ํน์ ํ์ ์ ํํ์ง ์์ผ๋ฉด, ํ ์ด๋ธ์ ๋ชจ๋ ํ์ด ์ ๋ฐ์ดํธ
1
**update** users **set** username=**'kimlucky'**
- NOT NULL ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์ NULL ๊ฐ์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
- ๊ธฐ๋ณธ ํค(primary key) ๋๋ ๊ณ ์ ํค(unique key) ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์ ์ค๋ณต ๊ฐ์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
- ์ธ๋ ํค(foreign key) ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์ด์ ์กด์ฌํ์ง ์๋ ์ฐธ์กฐ ๊ฐ์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
UPDATE๋ฌธ์ ์ฌ์ฉํ ๋ ๋ค์ํ ์ฐ์ฐ์์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๊ณ์ฐํ๊ฑฐ๋ ์กฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์กด ๊ฐ์ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ๊ฑฐ๋, ๋ฌธ์์ด์ ์ฐ๊ฒฐํ๊ฑฐ๋, ๋ ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์์)
1
2
3
4
5
6
7
8
9
10
11
-- ํน์ ์ฌ์ฉ์์ ๋์ด๋ฅผ 1 ์ฆ๊ฐ์ํค๊ธฐ:
UPDATE Users
SET age = age + 1
WHERE user_id = 1;
-- ํน์ ๋์์ ์ถํ ์ฐ๋๋ฅผ 2023์ผ๋ก ๋ณ๊ฒฝ:
UPDATE Books
SET publication_year = 2023
WHERE book_id = 1;
DELETE
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ
- ํน์ ํ ์ด๋ธ์์ ํ(row)์ ์ ํํ์ฌ ์ญ์ ๊ฐ๋ฅ
1
2
3
4
5
6
7
8
9
10
11
12
13
--ํน์ ์ฌ์ฉ์ ์ญ์ :
DELETE FROM Users
WHERE user_id = 1;
--์ฌ์ฉ์ ํ
์ด๋ธ์์ ํน์ ์ฌ์ฉ์ ์ญ์ ํ๊ธฐ:
DELETE FROM Users WHERE username = 'john_doe';
--๋์ ํ
์ด๋ธ์์ ํน์ ๋์ ์ญ์ ํ๊ธฐ:
DELETE FROM Books WHERE title = 'Sample Book';
--์ถํ์ฌ ํ
์ด๋ธ์์ ์ฃผ์๊ฐ ๋ถ๋ถ๋ช
ํ ์ถํ์ฌ ์ญ์ ํ๊ธฐ:
DELETE FROM Publishers WHERE address IS NULL;
1
null ํ ๋ =null ์๋๊ณ iS NULL;
์ฃผ์์ฌํญ
- WHERE ์ ์ ์ฌ์ฉํ์ฌ ํน์ ํ์ ์ ํํ์ง ์์ผ๋ฉด, ํ ์ด๋ธ์ ๋ชจ๋ ํ์ด ์ญ์ ๋จ์ด ๊ฒฝ์ฐ, TRUNCATE๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์
- ์ญ์ ๋ ๋ฐ์ดํฐ๋ ๋ณต๊ตฌํ ์ ์์ผ๋ฏ๋ก, DELETE๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ๊ธฐ
-
์ธ๋ ํค(foreign key) ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ์ธํด ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง ๊ฒฝ์ฐ, ํด๋น ํ์ ์ญ์ ํ ์ ์์. ์ด ๊ฒฝ์ฐ, ์ฐธ์กฐํ๋ ํ์ ๋จผ์ ์ญ์ ํ๊ฑฐ๋ ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด์ ์์ ํด์ผ ํจ
-
DELETE FROM ๊ณผ TRUNCATE TABLE์ ์ฐจ์ด
์ฐจ์ด DELETE FROM TRUNCATE ์๋๋ฐฉ์ WHERE ์ ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ํ๋์ฉ ์ญ์ ์ด ๊ฒฝ์ฐ, ๊ฐ ํ์ ์ญ์ ์ ๋ํ ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋๊ณ , ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ ์ ์์. ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ญ์ ํ๋ฉฐ, ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ง ์๊ณ ํ ์ด๋ธ์ ์ด๊ธฐ ์ํ๋ก ์ฌ์ค์ ํฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ์X ์ฑ๋ฅ ๊ฐ๋ณ์ ์ผ๋ก ์ญ์ ํ๋ฏ๋ก, ํ ์ด๋ธ์ด ํฐ ๊ฒฝ์ฐ ์คํ ์๋๊ฐ ๋๋ฆด ์ ์์ ํ ๋ฒ์ ์ญ์ ํ๋ฏ๋ก, ์คํ ์๋๊ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ์ฌ์ฉ์ฌ๋ก ํน์ ์กฐ๊ฑด(WHERE์ )์ ๋ง์กฑํ๋ ํ์ ์ญ์ ํ ๋ ์ฌ์ฉ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ ๋ ์ฌ์ฉ ์ค๋ฌด ํน์ ๋ ์ง ์ด์ ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ฃจ์ ํ ๋ฒ์ฉ ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํด์ผ ํ๋ ์๋๋ฆฌ์ค DELETE FROM ์ค๋ฌด์ ๋ํ ์์ [2022-05-01 ์ด์ ๋ฐ์ดํฐ ์ญ์ ]
1 2
DELETE FROM LoanRecords WHERE loan_date < '2022-05-01';
DELETE ์
โ
DELETE ํ
โ
-
Leave a comment