1. 제약 조건의 기본 키 제약 조건
제약 조건: 열을 제한하기 위해 제약 조건이 열에 추가됩니다.
1. 기본 키 제약 조건(고유 식별): 비어 있지 않음, 고유, 참조됨
테이블의 열이 기본 키로 지정되면 클래스가 비어 있을 수 없으며 중복 값이 나타날 수 없습니다
테이블 생성 시 기본 키 지정 두 가지 방법:
CREATE TABLE stu( sid CHAR(6) PRIMARY KEY, sname VARCHAR(20), age INT, sex VARCHEAR(10) ); CREATE TABLE stu( sid CHAR(6) , sname VARCHAR(20), age INT, sex VARCHEAR(10), PRIMARY KEY(sid) );
sid 열을 기본 키 열로 지정합니다. 즉, sid 열에 기본 키 제약 조건을 추가합니다.
테이블 수정 시 기본 키 지정:
ALTER TABLE stu ADD PRIMARY KEY(sid);
기본 키 삭제:
ALTER TABLE stu DROP PRIMARY KEY;
2. 기본 키는 자동으로 커집니다
기본 키 열의 특징은 다음과 같습니다. 고유해야 하고 비워둘 수 없으므로 일반적으로 기본 키를 정수로 지정하고 다음과 같이 설정합니다. 이렇게 하면 데이터를 삽입할 때 기본 키 열의 고유하고 Null이 아닌 특성을 보장할 수 있습니다.
테이블 생성 시 기본 키 자동 증가 지정
CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20), age INT, sex VARCHEAR(10) );
테이블 수정 시 기본 키 자동 증가 설정:
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
테이블 수정 시 기본 키 자동 증가 삭제:
ALTER TABLE stu CHANGE sid sid INT ;
기본 키 테스트 자동 증가:
INSERT INTO stu VALUES(NULL,'zhangsan',23,'man'); INSERT INTO stu(sname,age,sex) VALUES(NULL,'zhangsan',23,'man');
3. Null이 아닌 제약 조건
일부 열은 Null 값으로 설정할 수 없으므로 Null이 아닌 제약 조건을 추가할 수 있습니다.
예:
CREATE TABLE stu ( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL, age INT, sex VARCHAR(10) );
는 sname 열에 null이 아닌 제약 조건을 설정합니다.
4. 고유 제약조건
차고의 일부 열은 반복되는 값을 가질 수 없으므로 해당 열에 고유 제약조건을 추가할 수 있습니다.
예:
CREATE TABLE stu ( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL UNIQUE, age INT, sex VARCHAR(10) );
2. 개념 모델
1. 객체 모델: Java의 도메인, 예: 사용자, 학생
2 관계형 모델: 데이터베이스의 테이블, 1대다, 1대1. 다수 대 다수.
3. 외래 키 제약 조건
외래 키는 다른 테이블의 기본 키 값이어야 합니다. (외래 키는 기본 키를 참조해야 합니다.)
외래 키는 반복될 수 있습니다.
외래 키는 비어 있을 수 있습니다
1. 제약 조건 생성 시 외래 키 추가
CREATE TABLE dept ( deptno INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(50) ); insert into dept values(10,'研发部'); insert into dept values(20,'人力部'); insert into dept values(30,'财务部'); CREATE TABLE emp ( empno INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(50), deptno INT, CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno) ); CREATE TABLE dept ( deptno INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(50) ); INSERT INTO dept VALUES(10,'研发部'); INSERT INTO dept VALUES(20,'人力部'); INSERT INTO dept VALUES(30,'财务部'); INSERT INTO emp(empno,ename) VALUES(null,'zhangsan'); INSERT INTO emp(empno,ename,deptno) VALUES(null,'lisi',10); INSERT INTO emp(empno,ename,deptno) VALUES(null,'zhangsan',80); /* Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`mydb2`.`emp`, CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`)) */
2. 테이블 수정 시 외래 키 제약 조건 추가:
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERNCES dept(deptno);
4. 데이터베이스 관계형 모델
1. 일대일 관계 설정 테이블의 기본 키는 기본 키와 외래 키 중 하나를 만들어야 합니다.
CREATE TABLE hasband ( hid INT PRIMARY KEY AUTO_INCREMENT, hname VARCHAR(50) ); CREATE TABLE wife ( wid INT PRIMARY KEY AUTO_INCREMENT, wname VARCHAR(50), CONSTRAINT fk_wife_hasband FOREIGN KEY (wid) REFERENCES hasband(hid) );
2. 다대다 관계
테이블에 다대다 관계를 설정하려면 중간 테이블을 사용해야 합니다. 즉, 3개의 테이블이 필요하고 중간에 2개의 외래 키를 사용해야 합니다. 다른 두 테이블의 기본 키를 참조하는 테이블입니다.
CREATE TABLE student ( sid INT PRIMARY KEY , ...... ); CREATE TABLE teacher( tid INT PRIMARY KEY , ...... ); CREATE TABLE stu_tea ( sid INT, tid INT, ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY (sid) REFERENCES student(sid) , ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY (tid) REFERENCES teacher(tid) );
다음과 같이 중간 테이블에 관계를 설정합니다.
INSERT INTO stu_tea VALUES(5,1); INSERT INTO stu_tea VALUES(2,2); INSERT INTO stu_tea VALUES(3,2);
5. 다중 테이블 쿼리
1. 분류
결과 집합 병합
연결 쿼리
하위 쿼리
2. to be merge 테이블에서 결과 집합의 열 유형과 개수가 동일합니다
UNION, 중복 행 제거
UNION ALL, 중복 행 제거 안 함
SELECT * FROM 表1名 UNION ALL SELECT * FROM 表2名;
3 Join query
①분류
Inner Join
Outer Join
Left Outer Join
Right Outer Join
Full Outer Join(mysql은 지원하지 않음)
Natural Join(간단화된 방식에 속함)
②Inner Join
Dialect: SELECT * FROM Table 1 별칭 1, 표 2 별칭 2 WHERE 별칭 1.xx = 별칭 2.xx
SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno;
조건부 필터링을 사용하여 데카르트 곱에서 불필요한 정보를 제거합니다.
표준: SELECT * FROM 테이블 1 별칭 1 INNER JOIN 테이블 2 별칭 2 ON 별칭 1.xx = 별칭 2.xx;
SELECT e.ename, e.sal , d.dname FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
Natural: SELECT * FROM 테이블 1 별칭 1 NATURAL JOIN 테이블 2 별칭 2; 내부 조인으로 쿼리한 모든 레코드는
3외부 조인
Left 외부: SELECT * FROM Table 1 Alias 1 LEFT OUTER JOIN Table 2 Alias 2 ON Alias 1.xx = Alias 2 조건을 충족합니다. xx;
왼쪽 테이블 레코드는 조건 충족 여부와 관계없이 쿼리되며, 오른쪽 테이블은 조건이 충족되어야만 검색할 수 있습니다. 조건에 맞지 않는 왼쪽 테이블의 레코드는 오른쪽 테이블에서 null이 됩니다.
SELECT e.ename, e.sal , d.dname FROM emp e NATURAL JOIN dept d;
자연 왼쪽 외부: SELECT * FROM Table 1 Alias 1 NATURAL LEFT OUTER JOIN Table 2 Alias 2 ON Alias 1.xx = Alias 2.xx
오른쪽 외부: SELECT * FROM Table; 1 Alias 1 RIGHT OUTER JOIN Table 2 Alias 2 ON Alias 1.xx = Alias 2.xx
오른쪽 테이블의 레코드는 조건 충족 여부에 관계없이 쿼리됩니다. 왼쪽 테이블의 레코드는 조건을 만족하는 경우에만 검색할 수 있습니다. 조건을 충족하지 않는 오른쪽 테이블의 레코드는 왼쪽 테이블에서 null이 됩니다.
오른쪽 외부 자연: SELECT * FROM Table 1 Alias 1 NATURAL RIGHT OUTER JOIN Table 2 Alias 2 ON Alias 1.xx = Alias 2.xx
전체 링크: UNION을 사용하여 다음을 수행할 수 있습니다. 전체 조인을 완료합니다.
SELECT e.ename, e.sal , IFNULL(d.dname,'无部门') AS dname FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;
4.Subquery
쿼리에 쿼리가 있습니다.(선택 키워드 개수 확인)
1나타나는 위치
WHERE 이후에 조건으로 존재합니다.
FROM 이후에 테이블로 존재합니다(여러 행 및 여러 열)
②조건
단일 행 및 단일 열: SELECT * FROM table 1 별칭 1 WHERE 열 1 [=, >, <, >=, <=, !=] (SELECT 열 FROM 테이블 2 별칭 2 WHERE 조건);
SELECT e.ename, e.sal , d.dname FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno UNION SELECT e.ename, e.sal , d.dname FROM emp e RIGHT OUTER JOIN dept d ON e.deptno=d.deptno;
여러 행 및 단일 열: SELECT * FROM table 1 별칭 1 WHERE 열 1 [IN,ALL,ANY] (SELECT 열 FROM 테이블 2 별칭 2 WHERE 조건)
SELECT * FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
단일 행 및 다중 열: SELECT * FROM table 1 alias 1 WHERE (Column 1, Column 2) IN (SELECT Column 1, Column 2 FROM Table 2 Alias 2 WHERE 조건)
SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE job='经理') ;
다중 행 및 다중 열: SELECT * FROM Table 1 별칭 1, (SELECT...) 테이블 2 별칭 2 WHERE 조건 ;
위 내용은 MySQL의 제약 조건, 다중 테이블 쿼리 및 하위 쿼리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!