>데이터 베이스 >MySQL 튜토리얼 >Mysq에서 테스트 상위 테이블, 하위 테이블 및 테스트 사례 설정 요약

Mysq에서 테스트 상위 테이블, 하위 테이블 및 테스트 사례 설정 요약

php是最好的语言
php是最好的语言원래의
2018-08-01 15:06:232457검색

테스트 테이블 생성

버전 정보 보기

select version();
5.7.22

상위 테이블 생성

drop table if exists Models;
CREATE TABLE Models
  (
    ModelID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
   Name VARCHAR(40) NOT NULL,
    PRIMARY KEY (ModelID)
);

하위 테이블 생성

drop table if exists Orders;
CREATE TABLE Orders
  (
    ID          SMALLINT UNSIGNED NOT NULL PRIMARY KEY,
   ModelID     SMALLINT UNSIGNED NOT NULL,
     Description VARCHAR(40),
    FOREIGN KEY (ModelID) REFERENCES Models (ModelID)
      ON DELETE cascade
  );
#🎜🎜 #테스트

테스트 사례 - 상위 테이블에 해당 데이터가 없습니다. 하위 테이블을 먼저 삽입하세요

insert into Orders(Id,ModelID,Description) values (1,1,'a');

결과: 실행 실패

예외: [2018- 07-31 11: 08:01] 23000 하위 행을 추가하거나 업데이트할 수 없습니다. 외래 키 제약 조건이 실패합니다. (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
Reason: 외래 키 제약 조건 검사를 통과하지 못했습니다. 캐스케이드 삭제 시#🎜🎜 #bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
原因:通不过on delete cascade 的外键约束检查

测试用例-先插入主表数据,再插入子表数据

insert into Models(ModelID,Name) values (1,'a');
insert into Orders(Id,ModelID,Description) values (1,1,'a');

结果:执行成功

select * from Models;
1    a

select * from Orders;
1    1    a

测试用例-父子表都有数据,删除子表数据

delete from Orders where id = 1;

结果:执行成功

select * from Models;
1    a
select * from Orders;
为空

测试用例-父子表都有数据,删除父表书库

delete from Models where ModelID = 1;

结果:执行成功

select * from Models;
为空
select * from Orders;
为空

测试用例-父子表都有数据,更新子表外键

update Orders set ModelID = 3 where ID =1;

结果:执行失败
异常:[2018-07-31 12:33:02] 23000 Cannot add or update a child row: a foreign key constraint fails (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
原因:通不过on delete cascade 的外键约束检查

测试用例-父子表都有数据,更新父表主键

update Models set ModelID = 2 where ModelID =1;

结果:执行失败
异常:[2018-07-31 12:34:24] 23000 Cannot delete or update a parent row: a foreign key constraint fails (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID테스트 사례 - 기본 테이블 데이터를 먼저 삽입한 후 하위 테이블 데이터를 삽입

update Orders set Description = 'b' where ID =1;

결과: 실행 성공

select * from Orders;
1    1    b

테스트 사례- 상위 및 하위 테이블 모두 데이터가 있음, 하위 테이블 데이터 삭제

update Models set Name = 'c' where ModelID =1;

결과: 실행 성공

select * from Models;
1    c

테스트 사례 - 상위 및 하위 테이블 모두 데이터가 있음, 상위 테이블 라이브러리 삭제

rrreee

결과: 실행 성공

rrreee
테스트 사례 - 상위 테이블과 하위 테이블 모두 데이터가 있고, 하위 테이블 외래 키 업데이트

rrreee

결과: 실행 failedException: [2018-07-31 12:33:02] 23000 하위 행을 추가하거나 업데이트할 수 없습니다. 외래 키 제약 조건이 실패합니다(bov.Orders). >, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) 참조 모델 (ModelID) ON DELETE CASCADE) 이유: 계단식 삭제 시 외래 키 제약 조건 검사를 통과하지 못했습니다# 🎜🎜#

테스트 사례 - 상위 테이블과 하위 테이블 모두 데이터가 있습니다. 상위 테이블의 기본 키를 업데이트하세요

rrreeeResult : 실행 실패예외: [2018-07-31 12:34:24 ] 23000 상위 행을 삭제하거나 업데이트할 수 없습니다. 외래 키 제약 조건이 실패합니다(bov.Orders, CONSTRAINT <code>Orders_ibfk_1 FOREIGN KEY (ModelID ) REFERENCES Models (ModelID) ON DELETE CASCADE)#🎜 🎜#이유: 연속 삭제 시 외래 키 제약 조건 검사를 통과하지 못했습니다

#🎜 🎜#테스트 사례 - 상위 테이블과 하위 테이블 모두에 데이터가 있습니다. 비외래 키로 하위 테이블을 업데이트합니다.

rrreee# 🎜🎜#결과: 실행 성공

rrreee

테스트 사례 - 상위 테이블과 하위 테이블 모두에 데이터가 있고 기본 키가 아닌 상위 테이블 업데이트rrreee결과: 실행 성공# 🎜🎜#rrreee

관련글 : #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Mysql 데이터베이스 인덱스 구축 및 성능 테스트 #🎜🎜##🎜🎜##🎜🎜##🎜🎜# mysql 고성능 스트레스 테스트 (오랜만에 요약 #🎜🎜#) #🎜🎜##🎜🎜#관련 영상: #🎜🎜##🎜🎜 ##🎜🎜#데이터 구조 모험: 선형 테이블#🎜🎜## 🎜🎜#

위 내용은 Mysq에서 테스트 상위 테이블, 하위 테이블 및 테스트 사례 설정 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.