Error Code: 1452.
Cannot add or update a child row: a foreign key constraint fails
(`byeonghun`.`emp`, CONSTRAINT `emp_ibfk_1`
FOREIGN KEY (`deptid`)
REFERENCES `dept` (`deptid`))
내가 생각한 것이 맞는 것 같다.
그림 1.14
에서 기본키와 외래키에 대한 것이 나왔는데, FK 가 emp 에 있는 deptid이고, PK가 dept에 있는 deptid이기 떄문이다.
Pk: primary key, FK: foreign key
dept테이블, emp테이블
을 먼저 생성해줬는데, 코드를 보면 emp테이블
의 deptid
가 dept 테이블
의 deptid
를 참조한다. 즉 외래키로 설정이 되어있다. 그래서 dept
테이블에 데이터를 먼저 insert
해줘야 emp
에 data
를 넣을 때 참조를 할 수 있기 때문이다. dept table의 pk = dept id
, emp table의 pk = empid
dept
와 emp
테이블을 생성하고(46페이지)insert into dept values (400, '생산부', '500k');
emp
에 사원정보를 insert 하였다.insert into emp values (1001, '홍성길', 100, '2001.2.1', '특수영업', 1002, 350);
manager
가 없는데 문제에는 있어서 앞에서 만들 뷰랑 테이블을 모두 삭제하고 (drop table emp; , drop view new_emp;
) CREATE TABLE emp
( empid int(10) NOT NULL,
ename char(20),
deptid int(5),
hire_date date,
job char(20),
manager int(10),
salary int(10) NOT NULL,
PRIMARY KEY(empid),
FOREIGN KEY (deptid) REFERENCES dept(deptid)
);
// 뷰
create view new_emp
as select e.empid, e.ename, d.dname, e.salary
from emp e, dept d
where e.deptid = d.deptid ;
insert into emp (empid, ename, deptid, hire_date, job, salary) values (106, '강윤호', 200, '2001-01-10', '연말정산', 400);
select * from emp where job = '영업관리';
ename
, 부서이름 job
만 select
하려고 한다. 근데 추가적으로 급여 salary
가 400 이상인 조건이 존재한다.select ename, job from emp where salary >= 400;
deptid
가 이미 존재 하였다. deptid
가 존재하였다. select SUM(salary) from emp where deptid = 100 and 300;
select SUM(salary) from emp where deptid = 100 OR deptid = 300;
select max(salary) , min(salary) from emp;
로 조회를 해봤다.select max(salary) - min(salary) from emp;
select emp.ename, emp.job, emp.salary
from emp
where salary >= 380 and emp.deptid = 100;
select dept.dname
from emp , dept
where emp.deptid = dept.deptid
and emp. ename = '성재규';
// view 생성
create view H1_view
as select emp.empid, emp.ename, emp.deptid, emp.job, emp.salary
from emp, dept
where emp.deptid = dept.deptid;
// view 조회
SELECT * FROM H1_view;
구매부 deptid = 300
// 새로운 view 생성
create view H1_vieww
as select empid, ename, deptid, job, salary
from emp
where deptid = 100 or deptid = 200 or deptid = 400;
// 새로운 뷰 조회
SELECT * FROM H1_vieww;