이전 글에서 만든 [person]과 [favorite_food] 테이블에 데이터를 넣고, 수정하고, 삭제해볼꺼다.
[person] 테이블의 PK 열에 자동증가 기능(auto_increment
)을 켜면 유용하다.
ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
그런데 기존에 만들어두었던 [favorite_food] 테이블에 person_id
FK 제약이 걸려있기 때문에 이 제약조건을 먼저 비활성화 해주지 않으면 에러가 뜬다.
set foreign_key_checks=0; /*제약조건 비활성화*/
set foreign_key_checks=1; /*제약조건 다시 활성화*/
INSERT INTO
테이블이름 (primary_key, 열1, 열2, 열3, 열4)
VALUES (null, '값1','값2','값3','값4');
SELECT
열1, 열2, 열3, 열4
FROM 테이블이름;
만약에 테이블에 있는 모든 컬럼 가져와! 라고 하고싶다면 아래와 같이 * 을 쓰면된다.
SELECT *
FROME 테이블이름;
person_id가 '2'인 이유는 1개 데이터를 넣었다 삭제했기 때문이다 😓
[favorite_food] 테이블에 person_id=2
가 좋아하는 음식 3가지를 넣고,
order by
를 이용해 가장 좋아하는 음식을 알파벳 순서로 검색해보자.
SELECT
food
FROM favorite_food
WHERE person_id=2
ORDER BY food;
지금까지 [person] 테이블에 2개의 데이터를 넣었다.
golmori의 occupation을 추가해보자.
UPDATE
테이블이름
SET 추가하고자하는열 = '값'
WHERE primary_key = key값;
/*아래와 같이 추가했다*/
UPDATE
person
SET occupation = 'ProductManager'
WHERE person_id = 2;
잘 추가된걸 확인할 수 있다 😊
여기서
WHERE
절을 사용하지 않고update
문을 사용할 경우, 테이블의 모든 행을 수정하니까 주의하자.
DELETE FROM
테이블이름
WHERE primary_key = key값;
여기서도 마찬가지로
WHERE
절을 사용하지 않고delete
문을 사용할 경우, 테이블의 행이 모두 삭제되니 주의하자.
auto_increment
는 내부적으로 인덱스 처리를 한다. 데이터 추가 = 숫자가 증가
이걸 MySQL 엔진에서 기록하기 때문에, 행을 삭제해도 그 자리가 메꿔지면서 숫자가 바뀌지 않는다.
가장 마지막 숫자 + 1
의 숫자로 증가한다.
DROP TABLE 테이블이름;
상위 테이블에 데이터가 없는데, 하위 테이블에 데이터를 삽입하려고 할 경우 에러가 발생한다.
enum
자료형으로 특정 열에 들어갈 수 있는 값들을 지정해놨는데, 이외의 값을 입력하면 에러가 발생한다.
예를 들어 [person] 테이블에서 MBTI 열은 16가지 값만 들어갈 수 있다.
여기에 'ABCD'라는 이상한 값을 넣으려고 해보자.
위와 같은 에러가 발생한다. (truncate = 생략된, 불완전한)
date
시간자료형의 형식은 기본적으로 YYYY-MM-DD
이다.
그런데 예를 들어 DEC-21-1980
과 같은 식으로 입력하면 Incorrect date value:
에러가 발생한다.
모든 시간자료형의 형식을 외우긴 어려우니까 str_to_date()
함수를 이용해 내가 형식을 지정할 수도 있다.
골머리 싸매고 있었던 부분... 이해가 쏙쏙되는 띵글이네요 ㅠ 저도 열심히 공부하려고요!