Rumah > pangkalan data > tutorial mysql > Bagaimana Mengendalikan Sisipan Pukal Bersarang dengan Kekangan Utama Asing?

Bagaimana Mengendalikan Sisipan Pukal Bersarang dengan Kekangan Utama Asing?

Barbara Streisand
Lepaskan: 2025-01-13 07:42:43
asal
242 orang telah melayarinya

How to Handle Nested Bulk Inserts with Foreign Key Constraints?

Satu cabaran dengan sisipan kelompok bersarang ialah susunan sisipan. Katakan anda membuat jadual ibu bapa dan anak menggunakan rujukan kunci asing di antara mereka. Rekod ibu bapa biasanya perlu wujud sebelum rekod anak boleh dimasukkan. Untuk mengendalikan isu ini, rekod induk mesti dimasukkan dahulu, dan kemudian rekod anak.

Masalahnya ialah anda tidak boleh memasukkan rekod anak sehingga ID rekod ibu bapa tersedia. Salah satu cara untuk mengatasi masalah ini adalah dengan menggunakan prosedur tersimpan untuk memasukkan rekod. Prosedur yang disimpan boleh memasukkan rekod induk dahulu dan kemudian memasukkan rekod anak. Pendekatan ini memastikan bahawa rekod ibu bapa dimasukkan sebelum rekod anak dan setiap rekod anak mempunyai ID ibu bapa yang sah.

Cara lain untuk melakukan sisipan pukal bersarang ialah menggunakan teknik yang dipanggil "pementasan meja". Pementasan jadual melibatkan penciptaan jadual sementara untuk menyimpan sub-rekod. Rekod induk dimasukkan dahulu, kemudian rekod anak dimasukkan ke dalam jadual sementara. Setelah semua rekod kanak-kanak telah dimasukkan, anda boleh menggunakan pernyataan gabungan untuk memasukkan rekod kanak-kanak ke dalam jadual anak sebenar. Kelebihan pendekatan ini ialah ia memastikan rekod anak adalah sah kerana ia disemak pada jadual induk sebelum memasukkan.

Akhir sekali, anda boleh menggunakan klausa OUTPUT dalam pernyataan sisipan anda untuk menangkap dan menggunakan kunci utama (cth. scope_identity()). Ini akan membolehkan anda mengulangi entiti anak. Berikut ialah contoh pendekatan ini:

<code>            using (var scope = tran.Connection.BeginTransaction())
            {
                using (connectionString.WithTransaction(tran))
                {
                    int scope_identity = 0;
                    foreach (var entity in dataload.Entities){
                        scope_identity = connectionString.ExecuteScalar<int>(
                            $"INSERT INTO tbl_owner(OwnerName) OUTPUT INSERTED.OwnerID Values(@Name)", entity);

                        foreach(var project in entity.Related)
                        {
                          connectionString.Execute(
                              $"INSERT INTO tbl_project(Name, OwnerId) Values(@Name, @OwnerId)",
                                new{Name = project.Name, OwnerId = scope_identity });
                        }
                    }
                    scope.Commit();
                }
            }</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Mengendalikan Sisipan Pukal Bersarang dengan Kekangan Utama Asing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan