상세 컨텐츠

본문 제목

4. 테이블에 데이터 추가/수정/삭제 하기

CS전공 지식/4. 데이터베이스 개론 & SQL

by 본투비곰손 2023. 8. 14. 22:36

본문

728x90

MPLOYEE TABLE

create table EMPLOYEE(

id  INT PRIMARY KEY,

name  VARCHAR(30) NOT NULL,

birth_date  DATE,

sex CHAR(1) CHECK (sex in ('M', 'F')),

position VARCHAR(10),

salary  INT DEFAULT 50000000,

dept_id INT,

FOREIGN KEY (dept_id) referencess DEPARTMENT(id)

  on delete SET NULL on update CASCADE,

CHECK (salay >= 50000000)

);

데이터 추가 하기

INSERT INTO employee

mysql> INSERT INTO employee

    -> VALUES (1, 'MESSI', '1987-02-01', 'M', 'DEV_BACK', 100000000, NULL);

순서대로 나열하여 데이터를 추가하게 된다. dept_id에 NULL값을 넣은 이유는 현재 DEPARTMENT에 아무 값도 없기 때문임

mysql> INSERT INTO employee

    -> VALUES (1, 'JANE', '1996-05-05', 'F', 'DSGN', 90000000, NULL);

ERROR 1062 (23000): Duplicate entry '1' for key 'employee.PRIMARY' //PRIMARY KEY 1이 중복으로 에러
mysql> INSERT INTO employee

    -> VALUES (2, 'JANE', '1996-05-05', 'F', 'DSGN', 40000000, NULL);

ERROR 3819 (HY000): Check constraint 'employee_chk_2'is violated //salay가 50000000이하로 에러

어떤 Constraint를 위반하여 에러가 발생했는지 확인하려면 아래와 같이 입력!!

입력된 데이터 확인

JENNY의 DATA를 입력할 때 salary 입력하지 않았지만 각 50000000이 입력되어 있는 이유는 맨처음 아래와 같이 지정했기 때문

salary  INT DEFAULT 50000000,

INSERT statement

INSERT INTO table_name VALUES(comma-separated all values);
INSERT INTO table_name(attributes list)

  VALUES(attributes list 순서와 동일하게 comma-separated values);
INSERT INTO table_name VALUES (..., ..), (..., ..), (..., ..); // 여러개의 tuple 넣기

INSERT INTO employee values

INSERT INTO department values

INSERT INTO project values

INSERT INTO works_on values

select * from DB_NAME 조회하기

UPDATE DB_NAME SET 업데이트 할 attribute = 업데이트 할 값 WHERE 조건

데이터 수

position 이 DEV_BACK인 직원에게 dept_id = 1003 으로 수정하기

mysql> UPDATE employee

    -> SET dept_id = 1003

    -> WHERE position="DEV_BACK";

Query OK, 0 rows affected (0.00 sec)

Rows matched: 2  Changed: 0  Warnings: 0

dept_id = 1003 인 직원의 salary 2배로 수정 하기

mysql> UPDATE employee

    -> SET salary = salary*2

    -> WHERE dept_id=1003;

Query OK, 4 rows affected (0.00 sec)

Rows matched: 4  Changed: 4  Warnings: 0

프로젝트 ID 2003에 참여한 직원의 연봉을 2배로 인상

mysql> UPDATE employee, works_on //2개의 테이블을 참조하여 쿼리 작성

    -> SET salary = salary *2

    -> WHERE id=empl_id and proj_id=2003;//employee의 id와 works_on의 empl_id가 같고 proj_id가 2003

Query OK, 6 rows affected (0.01 sec)

Rows matched: 6  Changed: 6  Warnings: 0

아래와 같이 어느 테이블의 값인지 작성하면 가독성이 좋다.

mysql> UPDATE employee, works_on //2개의 테이블을 참조하여 쿼리 작성

    -> SET salary = salary *2

    -> WHERE employee.id = works_on.empl_id and proj_id=2003;

Query OK, 6 rows affected (0.01 sec)

Rows matched: 6  Changed: 6  Warnings: 0

모든 값을 업데이트 하려면 WHERE를 작성하지 않으면 된다.

UPDATE satement

UPDATE table_name(s)

SET attribute = value [attribute1= value, attribute2= value]

WHERE condition(s);

DELETE statement 데이터 삭제 하기

  • John이 퇴사하여 employee 테이블에서 정보를 삭제 해야한다.
  • John의 employee ID는 8
  • John은 project 2001에 참여 하였다.
mysql> DELETE FROM employee WHERE id=8;

Query OK, 1 row affected (0.01 sec)

아래와 같이 FOREIGN KEY로 EMPLOYEE(id)가 참조 되어있어서 따로 삭제하지 않아도 삭제 된다.

create table WORKS_ON(

empl_id INT,

proj_id INT,

PRIMARY KEY (empl_id, proj_id),

FOREIGN KEY (empl_id) references EMPLOYEE(id)

  on delete CASCADE on update CASCADE

FOREIGN KEY (proj_id) references PROJECT(id)

  on delete CASCADE on update CASCADE

);

다중 조건으로 삭제 하기

DELETE FROM works_on WHERE empl_id = 5 and proj_id =2002;//empl_id가 5이고 proj_id=2002인 값 삭제
mysql> DELETE FROM works_on WHERE empl_id = 5 and proj_id<>2001;

Query OK, 1 row affected (0.00 sec) // empl_id가 5이고 proj_id=2001을 제외한 모든 값 삭제(!= 사용)

모든 값을 삭제 하려면 WHERE를 작성하지 않으면 된다. (사용 시 주의!!!)

DELETE statement

DELETE FROM table_name
WHERE condition(s);
728x90

관련글 더보기