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 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 넣기
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);
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);
6. SQL로 데이터 조회하기 2 (0) | 2023.08.18 |
---|---|
5. SQL로 데이터 조회하기(1) (0) | 2023.08.17 |
3-2. 데이터베이스 생성하기 (0) | 2023.08.10 |
3-1. 데이터베이스 생성하기 (0) | 2023.08.09 |
2. 관계형 데이터베이스 (0) | 2023.08.08 |