NULL을 허용하지 않는 column 값일 경우 데이터를 생략하면 오류가 난다. default값이 지정되어 있는 Column 값은 삽입할 값을 생략할 경우 미리 저장해둔defult값이 삽입된다. NULL을 허용하지 않는 기본키(Primary Key)의 경우 반드시 값을 삽입해주어야 하며, 중복을 허용하지 않기 때문에 이미 존재하는 값 또한 삽입할 수 없다.INSERT구문에 IGNORE 구문만 넣어주면 실제로 값은 입력되지 않지만 오류는 무시하고 넘어갈 수 있게 됨. 예제 코드 ▼
-- VALUES에 값을 저장할 때는 usertbl(userID, NAME, birthYear, addr)의 개수와 항목에 맞춰서 값 저장
INSERT INTO usertbl(userID, NAME, birthYear, addr)
VALUES ('hong123', '홍길동', 2015, '서울');
-- NAME 도 NULL을 허용하지 않는 column이기 때문에 NAME 필드 값을 입력하지 않으면 이 역시 에러가 발생하게 된다.
INSERT INTO usertbl(userID, birthYear, addr)
VALUES ('lee123', 2015, '강원');
-- usertbl 테이블에 여러개의 행 삽입
INSERT INTO usertbl(userID, NAME, birthYear, addr)
VALUES ('LIM123', '임꺽정', 1977, '경기' ),
('moon123', '문인수', 2000 , '서울');
-- 두 개의 괄호 작성, 각 괄호 하나 당 하나의 행 내용이 됨.
-- 테이블 복사
-- 서브 쿼리를 이용해 usertbl 모든 내용을 가져와서 usertbl_copy에 복사할 것이다.
-- 그러나 아래의 실행 결과로는 기본키가 존재하지 않게 나온다.
CREATE TABLE usertbl_copy(
SELECT *
FROM usertbl
);
-- 테이블 복사 / 구조만 복사함.
-- 아래의 결과는 데이터는 없고 구조만 복사함
CREATE TABLE usertbl_copy(
SELECT *
FROM usertbl
WHERE 1 = 0
);
기존에 테이블에 입력되어 있는 값을 수정할 때 사용하는 구문
예제 코드 ▼
-- hong123의 id를 가진 경우 이름을 고길동으로 변경
-- WHERE 절을 사용하지 않는 경우 모든 테이블의 이름이 고길동으로 바뀌게 됨
UPDATE usertbl
SET NAME = '고길동'
WHERE userID = 'hong123';
-- 그럼 모든 값을 다 동일하게 바꿀 일이 뭐가 있을까?
-- 모든 사원의 급여를 10%씩 인상시켜줄게!
UPDATE emp_salary
SET salary = salary * 1.1;
행 단위로 데이터를 삭제할 때 사용하는 구문
WHERE절을 주로 함께 사용하며, 생략할 경우 테이블의 모든 행들이 삭제되기 때문에 경고문이 출력되게 된다.
예제 코드 ▼
-- WHERE 없으면 테이블 모든 행을 지움
-- 실무에서는 DELETE 쿼리를 자주 사용하지는 않음. -> 먼저 내가 지우려는 데이터가 맞는지 확인한 후 지우는걸 추천
DELETE FROM usertbl
WHERE userID LIKE 'hong123';
-- mobile1 값이 NULL인 상위 2명을 삭제
DELETE FROM usertbl
WHERE mobile1 IS NULL
LIMIT 2;
-- WHERE 없이 쿼리 실행 시 테이블 전체 삭제
DELETE FROM emp_salary;
-- 확인해보면 테이블 내 데이터들이 전부 삭제된 것을 확인할 수 있다.
SELECT * FROM emp_salary;
IGNORE 구문만 넣어주면 오류를 무시하고 넘어감(데이터는 입력이 안됨)INSERT INTO ~ ONSELECT @@autocommit / 해당 결과가 1이면 활성화, 0이면 비활성화)SUBQUERY : 쿼리문 내 쿼리문
-- 가장 큰 키, 가장 작은 키의 이름과 키
SELECT NAME AS '이름',
height AS '키'
FROM usertbl
WHERE height = (SELECT MIN(height) FROM usertbl)
OR height = (SELECT MAX(height) FROM usertbl);
-- main query 실행 전에 sub query가 먼저 실행된 뒤, 결과 값을 main에서 사용