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를 참조하는 튜플이 존재하는 경우 삭제가 거부
참고 자료
'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 |