내 질문에 왜 나는 emp 테이블에 해당 레코드가있는 dept 테이블에서 레코드를 삭제할 수 있습니다.mysql이 외래 키가 참조하는 레코드를 삭제할 수있는 이유는 무엇입니까?
예를 들어, deptno = 10 인 레코드를 삭제할 수 있습니다. 반면 emp 테이블의 레코드가 외래 키를 사용하여 레코드를 참조하고 있습니다.
mysql> select * from emp;
+-------+-------+---------+------+----------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+---------+------+----------+------+------+--------+
| 7698 | BLAKE | MANAGER | 7839 | NULL | 2850 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | NULL | 2450 | NULL | 10 |
+-------+-------+---------+------+----------+------+------+--------+
2 rows in set (0.00 sec)
mysql> select * from dept;
+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
4 rows in set (0.00 sec)
mysql> delete from dept where deptno = 10;
Query OK, 1 row affected (0.00 sec)
이 내 테이블 구조 미리
CREATE TABLE dept(deptno int, dname varchar(14), loc varchar(13), PRIMARY KEY (deptno));
CREATE TABLE emp(empno int, ename varchar(10), job varchar(9), mgr int, hiredate date, sal int, comm int, deptno int, PRIMARY KEY (empno),FOREIGN KEY (deptno) REFERENCES dept (deptno));
INSERT INTO dept VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES(20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES(30,'SALES','CHICAGO');
INSERT INTO dept VALUES(40,'OPERATIONS','BOSTON');
INSERT INTO emp
VALUES(7698,
'BLAKE',
'MANAGER',
7839,
STR_TO_DATE('1-5-1981','dd-mm-yyyy'),
2850,
NULL,
30);
INSERT INTO emp
VALUES(7782,
'CLARK',
'MANAGER',
7839,
STR_TO_DATE('9-6-1981','dd-mm-yyyy'),
2450,
NULL,
10);
감사합니다.
이 EMP
mysql> show create table dept;
+-------+---------------------------------------------------
| Table | Create Table
+-------+---------------------------------------------------
| dept | CREATE TABLE `dept` (
`deptno` int(11) NOT NULL DEFAULT '0',
`dname` varchar(14) DEFAULT NULL,
`loc` varchar(13) DEFAULT NULL,
PRIMARY KEY (`deptno`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------
카스티하십시오 : InnoDB는 실행, InnoDB하지만 당신의 설정에서 사용할 수있는 경우 쿼리를 결정하기 위해, MySQL은 5.5부터 기본 스토리지 엔진이다 당신이 묻고있는 것을 성찰하십시오. 귀하의 질문을 이해할 수 없습니다. – cybermonkey
InnoDB 엔진을 사용하고 있습니까? myISAM은 외래 키 제약을 적용하지 않는다. –
만약 내가 deptno에있는 레코드를 삭제할 수 있다면, 해당 레코드의 emp 테이블에는 가치가 없다. – Pawan