>  기사  >  데이터 베이스  >  MySQL 문에서 기본 키와 외래 키를 사용하는 방법

MySQL 문에서 기본 키와 외래 키를 사용하는 방법

WBOY
WBOY앞으로
2023-06-03 12:14:022970검색

    1. 기본 키:

    1.1) 기본 키 필드 정의:

    데이터베이스 테이블에서 레코드를 고유하게 결정할 수 있는 필드 집합이 있는 경우 이를 기본 키 필드로 설계할 수 있습니다. 탁자.

    예: 개인의 정보 테이블(필드: 이름, 나이, 출신지, 직장...)을 생성하려는 경우 ID 번호만이 귀하를 식별할 수 있으므로 ID 번호는 기본 키.

    1.2) 생성:

    기본 키 필드 이름 기본 키

    1.3) 기본 키 선택 원칙

    원칙적으로 하나의 필드를 기본 키로 사용하며, 비즈니스 의미가 없는 필드를 사용하는 것이 좋습니다. id 등과 같은 기본 키

    1.4) 기본 키 값이 생성되는 방식:

    기본 키 필드의 유형과 길이는 기본 키 값이 생성되는 방식에 따라 결정됩니다.

    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.1) 외래 키 정의:

    일반적으로 두 테이블 간의 관계를 설정하는 데 사용됩니다. 외래 키의 주요 목적은 엔터티의 두 독립 인스턴스 간의 데이터 무결성을 유지하는 것입니다.

    2.2) 외래 키(제약 조건) 생성(권장하지 않음, 일반적으로 외래 키 제약 조건 없음, 외래 키 규칙만 있음):

    alert 테이블 기본 키 테이블 이름 추가 제약 조건 FK_ID(외래 키 이름) 외래 키(외래 키 필드) 이름 ) 외래 테이블 이름(기본 키 필드 이름) 참조

    2.3) 외래 키 발생:

    보충:

    테이블을 생성할 때 테이블 간에 비즈니스 관계(연관 관계)가 있을 수 있습니다. 생성될 수 있습니다.


    연관 관계에 존재하는 관계 유형:

    1 대 1: 한 테이블(A)의 한 레코드는 다른 테이블(B)의 한 레코드에만 대응할 수 있고, 다른 테이블(B)의 다른 레코드는 하나의 레코드 하나의 테이블(A)에 있는 하나의 레코드에만 대응할 수 있습니다.

                  예: 소프트웨어 공학 2777 학급 및 분대장, 시민권 및 신분증. (제품 테이블 및 제품 설명 테이블)

    1대다: 한 테이블(A)의 하나의 레코드는 다른 테이블(B)의 여러 레코드에 대응될 수 있습니다. . > 하나의 제품 카테고리에는 여러 개의 상품, 학생 및 클래스가 있을 수 있습니다.

    다대다: (테이블이 두 개 있는데, 테이블 A의 데이터 한 개가 다음에 해당합니다. B 테이블의 여러 항목, 동시에 테이블 B의 한 항목은 테이블 A의 여러 항목에 해당합니다.

                예: 고객 테이블 및 부서 테이블.

    관련 쿼리(외래 키를 사용하여 여러 테이블의 데이터를 동시에 쿼리)

    관련 쿼리 유형:

    내부 조인: 조건을 충족하는 모든 데이터를 쿼리하고 결과가 두 테이블 모두에 해당 레코드를 갖도록 요구

    왼쪽 외부 연결: 오른쪽 테이블에 해당 레코드가 없더라도 왼쪽 테이블의 정규화된 모든 데이터를 쿼리합니다.

    오른쪽 외부 조인: 왼쪽 테이블 레코드에 해당 레코드가 없더라도 오른쪽 테이블의 정규화된 모든 데이터를 쿼리합니다. 2.3.1) 일대다:

    예시: a (1) ---------- b (n)

    Father Watch

    TBL_STUDENT TBL_CLASS

    ID NAME CLASS_ID ID Name

    1001 zs 111 111 class1

    1002 ls 111 222 class2

    1003 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 문에서 기본 키와 외래 키를 사용하는 방법

    위 내용은 MySQL 문에서 기본 키와 외래 키를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제