Rumah > Artikel > pangkalan data > Cara menggunakan kunci utama dan kunci asing dalam pernyataan MySQL
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.
kunci utama nama medan kunci utama
Secara prinsipnya, gunakan satu medan sebagai kunci utama , dan disyorkan untuk menggunakan medan tanpa makna perniagaan sebagai kunci utama, seperti id, dsb.
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
biasanya digunakan untuk mewujudkan hubungan antara dua jadual. Tujuan utama kunci asing adalah untuk mengekalkan integriti data antara dua kejadian bebas entiti.
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)
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: 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 anaktbl_student tbl_class
id name class_id name1001 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%'
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!