SQL을 사용해서 데이터 추가하기
- 데이터를 추가할 때는 INSERT INTO 키워드를 사용하고, 그 뒤에 테이블 이름과 VALUES 값을 적어준다.
INSERT INTO employees (name, department, salary)
VALUES ('김철수', '영업', 3000000);
- 값들을 써줄 때 Attribute 순서에 맞게 값을 채워 넣어야 하는데, 이때 NULL값을 넣어야 하는 Attribute가 있다면 일단 NULL값을 넣어 넘겨야 한다.
- Query가 성공적으로 동작하면 해당 테이블에 데이터가 추가된다.
️️Primary키가 중복되는 경우
- Primary key는 유일한 값이며 중복되면 안 된다.
- 이미 존재하는 Primary Key에 중복해서 데이터를 Insert하려 할 때 발생하는 에러는 각 DBMS마다 다르다.
- MySQL: Duplicate entry '값' for key 'PRIMARY'
- PostgreSQL: ERROR: duplicate key value violates unique constraint "constraint_name"
- Oracle: ORA-00001: unique constraint (schema_name.table_name_pk) violated
Constraint를 위배하는 데이터를 넣으려는 경우
- Show Create Table 키워드를 활용하면 Constraint의 구체적인 의미를 확인할 수 있다.
- CHECK 제약 위배 에러 메시지:
- MySQL: CHECK constraint 'employees_salary_check' failed
- PostgreSQL: ERROR: check constraint "employees_salary_check" violated
-Oracle: ORA-00001: check constraint (employees_salary_chk) violated - NOT NULL 제약 위배 에러 메시지:
- MySQL: Column 'name' cannot be null
- PostgreSQL: ERROR: null value in column "name" violates not-null constraint "employees_name_not_null"
- Oracle: ORA-00001: not null constraint (employees_name_nn) violated - Foreign Key 제약 위배 에러 메시지:
- MySQL: Cannot add or update a child row: a foreign key constraint fails (orders_ibfk_1, CONSTRAINTorders_ibfk_1FOREIGN KEY (product_id) REFERENCESproducts(id))
- PostgreSQL: ERROR: insert or update on table "orders" violates foreign key constraint "orders_ibfk_1" on table "products"
- Oracle: ORA-00001: foreign key constraint (orders_fk) violated
️️️테이블에 데이터를 추가하는 쿼리 방법 3가지
테이블의 모든 애트리뷰트에 대응하는 값을 넣어주는 쿼리
INSERT INTO employees (name, department, salary)
VALUES ('김철수', '영업', 3000000);
일부 애트리뷰트에 대해서만 원하는 순서로 값을 넣는 쿼리
INSERT INTO employees (department, name, salary)
VALUES ('영업', '김철수', 3000000);
한 번에 여러 개의 데이터를 한 테이블에 넣는 쿼리
INSERT INTO employees (name, department, salary)
VALUES ('김철수', '영업', 3000000), ('박지영', '마케팅', 3500000);
SQL 쿼리를 이용해 데이터 수정 하기
UPDATE 테이블명 SET 열1 = 값1, 열2 = 값2, ... WHERE 조건;
UPDATE employees SET salary = 4000000 WHERE id = 1;
여러 개의 행을 수정 하는 쿼리
UPDATE employees SET salary = CASE WHEN department = '영업' THEN salary * 1.1 WHEN department = '마케팅' THEN salary * 1.2 END;
위 쿼리는 employees 테이블에 salary 컬럼이 영업이면 salary 값을 * 1.1로 업데이트, 마케팅이면 *1.2로 업데이트한다.
테이블 연결 후 업데이트 쿼리 작성 방법
- 두 개의 테이블을 연결하려면, 두 테이블 사이의 연결고리 역할(즉, 공통으로 가지는)을 하는 애트리뷰트를 찾아봐야 한다.
- 애트리뷰트 이름을 좀 더 직관적으로 적기 위해, Table_name.Attribute로 표현해주면 좋다.
- 만약 모든 데이터의 값을 수정하고 싶다면, WHERE 절 없이 SET 키워드 뒤에 새로운 값을 적어주면 된다.
데이터 삭제 하기
DELETE FROM 테이블명 WHERE 조건;
DELETE FROM employees WHERE department = '마케팅';
- 데이터를 삭제하기 위해서는 DELETE 키워드로 시작하여 테이블 이름을 작성하고, WHERE 절을 사용하여 삭제할 튜플의 조건을 정의한다.
- WHERE 절을 빼먹고 삭제하게되면 모든 데이터를 삭제하게 됨
️외래키 설정에 따른 삭제
CASCADE
- 외래키를 참조하는 튜플도 함께 삭제
DELETE FROM departments WHERE id = 1;
- 위 쿼리는 departments 테이블에서 id가 1인 부서를 삭제
- departments 테이블에 외래키를 참조하는 employees 테이블의 튜플도 함께 삭제
- 만약 WHERE id <> 1; (또는 !=)의 경우 1을 제외한 모든 데이터 삭제
RESTRICT
- 외래키를 참조하는 튜플이 존재하면 삭제를 거부
DELETE FROM departments WHERE id = 1;
- 위 쿼리는 departments 테이블에서 id가 1인 부서를 삭제를 시도하지만, employees 테이블에 departments 테이블의 id를 참조하는 튜플이 존재하는 경우 삭제가 거부
참고 자료
SQL로 DB에 데이터를 추가(insert)하고 수정(update)하고 삭제(delete)하는 방법을 배워봅니다. 쉽고 알찬 예제로 설명하니까 들러보세용 :)
'ComputerScience > Database' 카테고리의 다른 글
[Database]DB 정규화(normalization)개념과 정규화 과정(Normal form), 1NF ~ BCNF (0) | 2024.02.26 |
---|---|
[Database] 1. SELECT를 활용한 데이터 조회하기 (0) | 2024.02.21 |
[Database] SQL의 개념과 SQL로 데이터베이스를 정의하는 법(table 생성하기, 각종 데이터 타입, constraints, 키(key)들을 활용) (0) | 2024.02.18 |
[Database] functional dependency(함수 종속) 이란? (1) | 2024.02.06 |
[Database] Transaction (0) | 2024.02.04 |