데이터베이스 테이블에서 레코드를 고유하게 결정할 수 있는 필드 집합이 있는 경우 이를 기본 키 필드로 설계할 수 있습니다. 탁자.
예: 개인의 정보 테이블(필드: 이름, 나이, 출신지, 직장...)을 생성하려는 경우 ID 번호만이 귀하를 식별할 수 있으므로 ID 번호는 기본 키.
기본 키 필드 이름 기본 키
원칙적으로 하나의 필드를 기본 키로 사용하며, 비즈니스 의미가 없는 필드를 사용하는 것이 좋습니다. id 등과 같은 기본 키
기본 키 필드의 유형과 길이는 기본 키 값이 생성되는 방식에 따라 결정됩니다.
1.4.1)
자동 증가: 도움말 사용 데이터베이스 고유의 기본 키 생성 메커니즘
숫자 길이 데이터 양에 따라 결정
생성: 기본 키 필드 이름 기본 키가 null이 아님 auto_increment
특징:
장점: 자동으로 생성할 수 있으므로 개발 효율성이 높습니다. 쉽게 검색할 수 있도록 번호를 매겨 저장합니다. 공간을 거의 차지하지 않으며 개발자의 시간을 절약할 수 있습니다.
단점: 낮은 운영 효율성과 유연성이 없기 때문에 지정된 ID의 데이터를 수동으로 삽입하거나 가져오는 것이 번거로울 수 있습니다. 데이터 양이 너무 많으면 데이터베이스가 자동으로 증가하는 데 시간이 더 오래 걸립니다. 기본 키로 인해 데이터베이스 쿼리 작업이 느려집니다. 테이블을 병합하는 작업이 있는 경우 기본 키가 중복될 가능성이 있습니다.
1.4.2)
assighed: 프로그래머가 null이 아닌 유일한 알고리즘인 기본 키 값을 수동으로 생성합니다.
hi/low: 숫자 길이는 데이터 양에 따라 결정됩니다.
UUID: 문자열 길이는 32입니다. 비트
public class UUIDUtil {//java中自带UUID的算法 public static String getUUID(){ return UUID.randomUUID().toString().replaceAll("-", ""); } }
특징:
장점: 기본 키 값 생성이 매우 유연하고 어떤 상황에서도 고유성을 보장할 수 있으며 데이터 마이그레이션이 편리합니다. ~ 단점: 공간을 많이 차지하고 기억하기 어렵고 성능이 저하됩니다.
1.4.4)
공동 기본 키: 여러 필드의 유형과 길이에 따라 결정됨
2. 외래 키:
2.2) 외래 키(제약 조건) 생성(권장하지 않음, 일반적으로 외래 키 제약 조건 없음, 외래 키 규칙만 있음):
2.3) 외래 키 발생:
연관 관계에 존재하는 관계 유형:
1 대 1: 한 테이블(A)의 한 레코드는 다른 테이블(B)의 한 레코드에만 대응할 수 있고, 다른 테이블(B)의 다른 레코드는 하나의 레코드 하나의 테이블(A)에 있는 하나의 레코드에만 대응할 수 있습니다.
예: 소프트웨어 공학 2777 학급 및 분대장, 시민권 및 신분증. (제품 테이블 및 제품 설명 테이블)
1대다: 한 테이블(A)의 하나의 레코드는 다른 테이블(B)의 여러 레코드에 대응될 수 있습니다. . > 하나의 제품 카테고리에는 여러 개의 상품, 학생 및 클래스가 있을 수 있습니다.
다대다: (테이블이 두 개 있는데, 테이블 A의 데이터 한 개가 다음에 해당합니다. B 테이블의 여러 항목, 동시에 테이블 B의 한 항목은 테이블 A의 여러 항목에 해당합니다.
예: 고객 테이블 및 부서 테이블.
관련 쿼리(외래 키를 사용하여 여러 테이블의 데이터를 동시에 쿼리)
관련 쿼리 유형:
내부 조인: 조건을 충족하는 모든 데이터를 쿼리하고 결과가 두 테이블 모두에 해당 레코드를 갖도록 요구
왼쪽 외부 연결: 오른쪽 테이블에 해당 레코드가 없더라도 왼쪽 테이블의 정규화된 모든 데이터를 쿼리합니다.
오른쪽 외부 조인: 왼쪽 테이블 레코드에 해당 레코드가 없더라도 오른쪽 테이블의 정규화된 모든 데이터를 쿼리합니다. 2.3.1) 일대다:
예시: a (1) ---------- b (n)
Father WatchTBL_STUDENT TBL_CLASS
ID NAME CLASS_ID ID Name1001 zs 111 111 class1
1002 ls 111 222 class21003 ww 222
1004 zl
//查询所有姓张的学生的id,name和所在班级name select s.id,s.name,c.name as className from tbl_student s join tbl_class c on s.class_id=c.id//假如外键不可以为空 where s.name like 'z%'
2.3.2)在一对一中:
tbl_person tbl_card
id name id name
1001 zs 1001 card1
特点:
a)共享主键:(不推荐)
添加数据:先添加先产生的表,再后产生的表记录
删除数据:先删除后产生的表记录,再删除先产生的表记录
查询数据:无需进行连接查询:
//查询zhangsan的驾照信息 1001 select * from tbl_card where id='1001'
2.3.3)多对多:
tbl_student tbl_course
id name id name
1001 zs 111 java
1002 ls 222 mysql
tbl_student_course_relation
student_id course_id
1001 111
1001 222
1002 111
1002 222
特点:
添加数据时,先添加父表记录(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)记录;
删除数据时,先删除子表记录(tbl_student_course_relation),再删除父表记录(tbl_student,tbl_course)
查询数据时,可能会进行关联查询:
//查询所有姓张的学生的id,name,和所选课程的name select s.id,s.name,c.name as courseName from tbl_student s join tbl_student_course_relation scr on s.id=scr.student_id join tbl_course c on scr.course_id=c.id where s.name like 'z%'
위 내용은 MySQL 문에서 기본 키와 외래 키를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!