Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL

Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL

WBOY
WBOYke hadapan
2023-06-03 12:14:022886semak imbas

    1. Kunci utama:

    1.1) Takrif medan kunci utama:

    Dalam jadual pangkalan data, jika terdapat set medan yang boleh menentukan rekod secara unik, anda boleh mereka bentuknya sebagai medan utama utama jadual.

    Contoh: Jika anda ingin mencipta jadual maklumat seseorang (medan: nama, umur, tempat asal, unit kerja...), maka nombor ID ialah satu-satunya cara untuk mengenal pasti anda. , jadi nombor ID ialah kunci utama.

    1.2) Cipta:

    kunci utama nama medan kunci utama

    1.3) Prinsip pemilihan kunci utama;

    Secara prinsipnya, gunakan satu medan sebagai kunci utama , dan disyorkan untuk menggunakan medan tanpa makna perniagaan sebagai kunci utama, seperti id, dsb.

    1.4) Cara nilai kunci utama dijana:

    Jenis dan panjang medan kunci utama ditentukan oleh cara nilai kunci utama dijana:

    1.4. 1)

    Autokenaikan: Dengan bantuan mekanisme penjanaan kunci utama pangkalan data sendiri
    Panjang berangka ditentukan oleh jumlah data

    Penciptaan: nama medan kunci utama kunci utama not null auto_increment

    Ciri-ciri:

    Kelebihan: Kecekapan pembangunan yang tinggi kerana ia boleh dinomborkan dan disimpan secara automatik untuk memudahkan pengambilan semula dan boleh menjimatkan masa pembangun.

    Kelemahan: Kecekapan operasi yang rendah dan tidak fleksibel Kerana pertumbuhan automatiknya, ia akan menyusahkan untuk memasukkan atau mengimport data secara manual dengan ID yang ditentukan Jika jumlah data terlalu besar, pangkalan data akan meningkatkan secara automatik kunci utama. Masa akan menjadi lebih lama dan operasi menyoal pangkalan data akan menjadi lebih perlahan. Jika terdapat operasi untuk menggabungkan jadual, terdapat kebarangkalian bahawa kunci utama akan diduplikasi.

    1.4.2)

    senyap: Pengaturcara menjana nilai kunci primer secara manual, satu-satunya bukan null, algoritma.
    hi/low: Panjang jenis angka ditentukan mengikut jumlah data
    UUID : Panjang rentetan ialah 32 bit

    public class UUIDUtil {//java中自带UUID的算法
        public static  String getUUID(){
            return UUID.randomUUID().toString().replaceAll("-", "");
        }
    }

    Ciri:

    Kelebihan: Penjanaan nilai kunci utama adalah sangat fleksibel dan boleh memastikan keunikan dalam apa jua keadaan, dan pemindahan data adalah mudah.                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Kelemahan: Ia mengambil banyak ruang, sukar untuk diingati dan akan mengurangkan prestasi.

    1.4.4)

    Kunci primer bersama: ditentukan oleh jenis dan panjang berbilang medan

    2. Kunci asing:

    2.1) Kunci asing definisi :

    biasanya digunakan untuk mewujudkan hubungan antara dua jadual. Tujuan utama kunci asing adalah untuk mengekalkan integriti data antara dua kejadian bebas entiti.

    2.2) Penciptaan kunci asing (kekangan) (tidak disyorkan, umumnya tiada kekangan kunci asing, hanya konvensyen kunci asing):

    nama jadual kunci primer amaran menambah kekangan FK_ID (Nama kunci asing) kunci asing (nama medan kunci asing) rujukan Nama jadual luaran (nama medan kunci utama)

    2.3) Kejadian kunci asing:

    Tambahan:
    Semasa mencipta jadual, Mungkin terdapat menjadi hubungan perniagaan (hubungan persatuan) antara jadual, dalam hal ini kunci asing akan dijana.

    Jenis perhubungan yang wujud dalam perhubungan persatuan:

    1 hingga 1: Satu rekod dalam satu jadual (A) hanya boleh sepadan dengan satu rekod dalam jadual lain (B) dan satu lagi Satu rekod dalam satu jadual (B) hanya boleh sepadan dengan satu rekod dalam satu jadual (A).

    Cth: Kelas 2777 dan ketua skuad, warganegara dan kad pengenalan. (Jadual produk dan jadual penerangan produk)

    1 hingga banyak: Satu rekod dalam satu jadual (A) boleh sepadan dengan berbilang rekod dalam jadual lain (B) dan satu lagi jadual ( Satu rekod dalam B) hanya boleh sepadan dengan satu rekod dalam satu jadual (A).

    Cth: Jadual klasifikasi dan hasil produk mewakili sepasang lebih banyak hubungan Terdapat berbilang produk di bawah klasifikasi produk Sekeping data dalam jadual A sepadan dengan berbilang item dalam jadual B. dan pada masa yang sama, item dalam jadual B sepadan dengan berbilang item dalam jadual A)

    cth: meja pelanggan dan meja jabatan.

    Pertanyaan berkaitan (data pertanyaan dalam berbilang jadual serentak menggunakan kekunci asing)

    Jenis pertanyaan berkaitan:

    Sambungan dalaman: pertanyaan semua data yang memenuhi syarat dan memerlukan keputusan untuk berada dalam Terdapat rekod yang sepadan dalam kedua-dua jadual

    Cantuman luar kiri: Tanya semua data yang layak dalam jadual kiri, walaupun jika tiada rekod yang sepadan dalam jadual kanan

    Cantuman luar kanan : Tanya semua data yang layak dalam jadual kanan, walaupun tiada rekod yang sepadan dalam jadual kiri

    2.3.1) Dalam satu-ke-banyak:

    Contoh: A(1) ---------B(n)

    Jadual induk Jadual anak

    tbl_student tbl_class

    id name class_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%'

    Terdapat rekod yang sepadan dalam jadual, menggunakan cantuman dalam. Jika anda ingin mendapatkan semula semua rekod jadual kiri yang sepadan, anda boleh menggunakan pertanyaan gabungan luar kiri

     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%'

    三.主键和外键的区别总结:

    Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL

    Atas ialah kandungan terperinci Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam