🎯 μ„€κ³„ν•œ DBλ₯Ό 직접 생성해보고, μ™Έλž˜ ν‚€λ₯Ό μ„€μ •ν•˜μ—¬ ν…Œμ΄λΈ”μ„ μ—°κ²°ν•©λ‹ˆλ‹€.


πŸ“™ Today I Learned

DB ν…Œμ΄λΈ” 생성 μ‹€μŠ΅

DB 생성을 μœ„ν•΄ 터미널을 톡해 mariadb에 μ ‘μ†ν•΄μ€λ‹ˆλ‹€.

docker exec -it mariadb /bin/bash

mariadb -u root -p

λΉ„λ°€λ²ˆν˜Έ μž…λ ₯


1. Board λ°μ΄ν„°λ² μ΄μŠ€ 생성 및 μ‚¬μš©

-- λ°μ΄ν„°λ² μ΄μŠ€ 생성
CREATE DATABASE Board;

-- λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©
USE Board;


2. ν…Œμ΄λΈ” 생성 ν›„ ν…Œμ΄λΈ” ꡬ쑰 확인

-- ν…Œμ΄λΈ” 생성
CREATE TABLE users 
(
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(30) NOT NULL,
  password VARCHAR(30) NOT NULL,
  founding_date DATE,
  phone_num VARCHAR(11),
  PRIMARY KEY (id)
);

-- ν…Œμ΄λΈ” ꡬ쑰 확인
DESC users;


3. μ‚¬μš©μž 데이터 μ‚½μž… ν›„ 쑰회

-- μ‚¬μš©μž 데이터 μ‚½μž…
INSERT INTO users (name, password, founding_date) 
VALUES ("λ―ΌμŒμ‚¬", 1234, "1966-05-19");

-- ν…Œμ΄λΈ” λͺ¨λ“  데이터 쑰회
SELECT * FROM users;


4. κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 생성

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 생성
CREATE TABLE posts 
(
  id INT NOT NULL AUTO_INCREMENT,
  author VARCHAR(100) NOT NULL,
  subscriber INT,
  created_at TIMESTAMP DEFAULT NOW(),
  PRIMARY KEY (id)  
);

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” ꡬ쑰 확인
DESC posts;


5. κ²Œμ‹œκΈ€ 데이터 μ‚½μž… ν›„ 쑰회

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 데이터 μ‚½μž…
INSERT INTO posts (author, subscriber) 
VALUES ("κΉ€ν›ˆ", 35764);

-- ν…Œμ΄λΈ” λͺ¨λ“  데이터 쑰회
SELECT * FROM posts;


6. κ²Œμ‹œκΈ€ ν…Œμ΄λΈ”μ— μˆ˜μ •μΌμž μΆ”κ°€ ν›„ 쑰회

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ”μ— μˆ˜μ •μΌμž μΆ”κ°€
ALTER TABLE posts ADD COLUMN updated_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 전체 쑰회
SELECT * FROM posts;


7. κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” μˆ˜μ •

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” μž‘κ°€ 이름 μˆ˜μ •
UPDATE posts  
SET author = "μ •λŒ€κ±΄"  
WHERE id = 1;

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 전체 쑰회
SELECT * FROM posts;


8. κ²Œμ‹œκΈ€ ν…Œμ΄λΈ”μ— μ‚¬μš©μž μ™Έλž˜ ν‚€(FK) μΆ”κ°€ 및 μ„€μ •

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ”μ— user_id 칼럼 μΆ”κ°€
ALTER TABLE posts 
ADD COLUMN user_id INT;

-- user_id에 μ™Έλž˜ ν‚€(FK) μ„€μ •
ALTER TABLE posts
ADD FOREIGN KEY(user_id) 
REFERENCES users(id);

-- κ²Œμ‹œκΈ€ ν…Œμ΄λΈ” 전체 데이터 확인
SELECT * FROM posts;

-- ν…Œμ΄λΈ” ꡬ쑰 확인
DESC posts;

πŸ€” NOT NULLκ³Ό Default의 μ°¨μ΄λŠ” λ¬΄μ—‡μΌκΉŒ?

NOT NULL

  • ν•΄λ‹Ή μΉΌλŸΌμ— λ°˜λ“œμ‹œ 값이 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • NULL 값을 직접 λ„£λŠ” 것도 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

Default

  • 값이 λ“€μ–΄μ˜€μ§€ μ•Šμ„ 경우, 미리 μ„€μ •λœ κΈ°λ³Έκ°’μœΌλ‘œ μžλ™ μž…λ ₯ν•©λ‹ˆλ‹€.
  • NULL을 직접 μž…λ ₯ν•˜λ©΄ NULL이 μ €μž₯λ©λ‹ˆλ‹€.

9. 연결을 μœ„ν•΄ user_id μ‚½μž…

INSERT INTO posts (author, user_id) 
VALUES ("졜재영", 1);


10. 쑰인으둜 두 ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜μ—¬ 쑰회

SELECT posts.id, author, subscriber, created_at, updated_at, name, password, founding_date, phone_num 
FROM posts 
LEFT JOIN users ON posts.user_id = users.id;

✨ μΆ”κ°€λ‘œ μ•Œλ©΄ 쒋은 지식! auto_increment_lock_mode

νŠΈλžœμž­μ…˜ λ‘€λ°±μ΄λ‚˜ DELETE ν›„ INSERTν•œ 경우 AUTO_INCREMENT 값이 κ±΄λ„ˆλ›°λŠ” ν˜„μƒμ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

+----+---------+
| id | name    |
+----+---------+
|  1 | λ―ΌμŒμ‚¬   |
|  2 | 문학동넀 |
|  4 | κΉ€μ˜μ‚¬   |  -- 🚨 3을 κ±΄λ„ˆλ›°κ³  4κ°€ 됨!
|  5 | 뢁이십일 |      
+----+---------+
SET GLOBAL innodb_autoinc_lock_mode = 0;

이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μœ„μ™€ 같은 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 잘λͺ»λœ INSERT 문이 id 값에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.




MySQL (mariadb) λ‚ μ§œ / μ‹œκ°„ νƒ€μž…


  • DATE

    • λ‚ μ§œλ§Œ μ €μž₯ν•©λ‹ˆλ‹€.
    • ν˜•μ‹: YYYY-MM-DD

  • DATETIME

    • λ‚ μ§œμ™€ μ‹œκ°„μ„ μ €μž₯ν•©λ‹ˆλ‹€.
    • ν˜•μ‹: YYYY-MM-DD HH:MM:SS

  • TIME

    • μ‹œκ°„λ§Œ μ €μž₯ν•©λ‹ˆλ‹€.
    • ν˜•μ‹: HH:MM:SS

  • TIMESTAMP

    • λ‚ μ§œμ™€ μ‹œκ°„μ„ μ €μž₯ν•©λ‹ˆλ‹€.

    • ν˜•μ‹: YYYY-MM-DD HH:MM:SS

    • ✨ μ‹œμŠ€ν…œ μ‹œκ°„λŒ€ 정보에 맞게 μžλ™ μ €μž₯ν•©λ‹ˆλ‹€.

    • UTC κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό μ €μž₯ν•œ ν›„, μ‘°νšŒν•  λ•Œ μ‹œμŠ€ν…œ μ‹œκ°„λŒ€(ν•œκ΅­ μ‹œκ°„ λ“±)에 맞게 λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

      TIMESTAMP μ‹œκ°„λŒ€ μ €μž₯ 방법

      UTC (Coordinated Universal Time) : 세계 ν‘œμ€€ μ‹œκ°„
      KST (Korea Standard Time) : ν•œκ΅­ ν‘œμ€€ μ‹œκ°„ ( UTC + 9μ‹œκ°„ )

      ex. μ˜€ν›„ 3μ‹œ(KST) 데이터λ₯Ό μ €μž₯ν•œλ‹€λ©΄ UTC κΈ°μ€€μœΌλ‘œλŠ” μ˜€μ „ 6μ‹œλ‘œ μ €μž₯λ©λ‹ˆλ‹€.




✏️ ν•œ 쀄 회고

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό 독립적인 ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜κ³ , λ‹€μ‹œ μ™Έλž˜ 킀와 쑰인을 ν™œμš©ν•΄ μ—°κ²°ν•˜λŠ” 과정을 직접 μ‹€μŠ΅ν•˜λ©΄μ„œ 데이터 κ°„μ˜ 연관성을 μ„€κ³„ν•˜λŠ” 것이 μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€