Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL

WBOY
Lepaskan: 2023-06-03 12:14:02
ke hadapan
2893 orang telah melayarinya

    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("-", "");
        }
    }
    Salin selepas log masuk

    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%'
    Salin selepas log masuk

    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'
    Salin selepas log masuk

    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%'
    Salin selepas log masuk

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

    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!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!