


Masukkan baris dalam DB yang tidak menggunakan kunci utama atau kekangan unik
Sepanjang kerjaya saya selama 7 tahun sebagai pengaturcara, saya telah berinteraksi dengan SQL melalui ORM pada kebanyakan masa. Satu ciri daripada ORM Eloquent Laravel yang saya dapati amat berguna ialah kaedah updateOrInsert():
DB::table('posts') ->updateOrInsert( ['slug' => 'about'], // matching condition ['content' => 'Like and subscribe'] // created or updated values );
Dalam contoh di atas, Eloquent akan mencari baris dalam jadual siaran di mana slug sama dengan "kira-kira". Jika baris wujud dengan slug itu, Eloquent akan mengemas kini kandungan baris itu kepada "Suka dan langgan". Jika baris tidak wujud dengan slug itu, Eloquent akan mencipta baris baharu dengan slug "tentang" dan kandungan "Suka dan langgan".
Masalahnya: tiada kunci utama atau kekangan unik
Saya sedang menulis skrip migrasi untuk memindahkan data halaman dari tapak WordPress lama ke tapak WordPress baharu. Skrip bersambung ke pangkalan data tapak lama kemudian mencipta fail SQL yang boleh diimport ke pangkalan data tapak baharu. Tapak baharu sudah mempunyai beberapa halaman yang telah dialihkan secara manual, tetapi kandungannya mungkin sudah lapuk. Apabila halaman sudah wujud di tapak baharu, kami tidak mahu menciptanya lagi: kami mahu mengemas kini halaman yang sudah ada. Kami boleh menentukan sama ada halaman itu sudah wujud dengan menggunakan lajur post_name dalam pangkalan data WordPress, yang sepadan dengan slug URL halaman.
Jika post_name ialah kunci utama, kita boleh mencapai sesuatu yang serupa dengan kaedah createOrUpdate() Eloquent menggunakan pernyataan REPLACE, tetapi post_name bukanlah kunci utama.
Jika post_name mempunyai kekangan unik, kami boleh mencapai sesuatu yang serupa dengan kaedah createOrUpdate() Eloquent menggunakan INSERT ... ON DUPLICATE KEY UPDATE statement, tetapi post_name tidak mempunyai kekangan unik.
Ah, kegembiraan WordPress.
Saya melihat pernyataan IF MySQL, tetapi pernyataan IF hanya berfungsi dalam prosedur tersimpan, pencetus dan fungsi. Saya tidak mahu mencipta prosedur tersimpan dalam fail SQL yang akan saya import ke pangkalan data tapak baharu, jadi saya terpaksa mencari pilihan lain.
Penyelesaian: 2 pernyataan
Penyelesaian paling mudah yang saya dapati untuk mencontohi kefungsian Eloquent's updateOrInsert() dalam SQL tulen ialah memecahkan masalah kepada dua bahagian:
- Kemas kini mana-mana baris sedia ada dengan slug yang sepadan.
- Buat baris baharu jika tiada baris dengan slug yang sepadan.
Begini rupanya dalam amalan:
-- Update the post if it already exists. UPDATE wp_posts SET post_type = 'page', post_title = 'About', post_content = 'Like and subscribe' WHERE post_name = 'about'; -- Create a new post if it does not exist. INSERT INTO wp_posts (post_name, post_type, post_title, post_content) SELECT 'about', 'page', 'About', 'Like and subscribe' WHERE NOT EXISTS ( SELECT 1 FROM wp_posts WHERE post_name = 'about' );
NOTA: Contoh ini menghilangkan banyak lajur wp_posts yang diperlukan oleh WordPress untuk ringkas dan jelas.
Mempelajari tentang INSERT ... SELECT pernyataan adalah detik "aha" untuk saya. Ia bertujuan untuk menggunakan hasil pertanyaan daripada jadual lain untuk melaksanakan banyak sisipan sekaligus. Walau bagaimanapun, anda boleh menggunakan dan menyalahgunakan keupayaan SQL dengan menyediakan nilai anda sendiri dan hanya melaksanakan sisipan apabila siaran dengan post_name "tentang" tidak wujud.
Adakah ini penyelesaian yang paling elegan dan cekap untuk masalah ini? Mungkin tidak. Tetapi ia cukup baik untuk penghijrahan sekali sahaja tapak WordPress, dan ia membolehkan anda mengemas kini atau memasukkan baris tanpa memerlukan prosedur tersimpan atau sebarang logik aplikasi. Semoga siaran ini membantu anda semasa anda menulis pertanyaan yang hebat tanpa bantuan ORM.
Atas ialah kandungan terperinci Masukkan baris dalam DB yang tidak menggunakan kunci utama atau kekangan unik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

InnoDB menggunakan redolog dan undologs untuk memastikan konsistensi dan kebolehpercayaan data. 1. Pengubahsuaian halaman data rekod untuk memastikan pemulihan kemalangan dan kegigihan transaksi. 2.UNDOLOGS merekodkan nilai data asal dan menyokong penggantian transaksi dan MVCC.

Metrik utama untuk menjelaskan arahan termasuk jenis, kunci, baris, dan tambahan. 1) Jenis mencerminkan jenis akses pertanyaan. Semakin tinggi nilai, semakin tinggi kecekapan, seperti const adalah lebih baik daripada semua. 2) Kunci memaparkan indeks yang digunakan, dan null menunjukkan tiada indeks. 3) Baris menganggarkan bilangan baris yang diimbas, yang mempengaruhi prestasi pertanyaan. 4) Tambahan memberikan maklumat tambahan, seperti menggunakanFilesort meminta bahawa ia perlu dioptimumkan.

MenggunakanTemary menunjukkan bahawa keperluan untuk membuat jadual sementara dalam pertanyaan MySQL, yang biasanya dijumpai di Orderby menggunakan lajur yang berbeza, GroupBy, atau tidak diindeks. Anda boleh mengelakkan berlakunya indeks dan menulis semula pertanyaan dan meningkatkan prestasi pertanyaan. Khususnya, apabila menggunakan pembelian muncul dalam menjelaskan output, ini bermakna MySQL perlu membuat jadual sementara untuk mengendalikan pertanyaan. Ini biasanya berlaku apabila: 1) deduplikasi atau pengelompokan apabila menggunakan yang berbeza atau kumpulan; 2) Susun apabila Orderby mengandungi lajur bukan indeks; 3) Gunakan subquery kompleks atau menyertai operasi. Kaedah Pengoptimuman termasuk: 1) Orderby dan GroupB

MySQL/InnoDB menyokong empat tahap pengasingan transaksi: ReadUncommitted, ReadCommitted, RepeatableRead dan Serializable. 1. ReadoMuncommitted membolehkan membaca data yang tidak komited, yang boleh menyebabkan bacaan kotor. 2. 3.RepeatableRead adalah tahap lalai, mengelakkan bacaan kotor dan bacaan yang tidak boleh diulang, tetapi bacaan hantu mungkin berlaku. 4. Serializable mengelakkan semua masalah konkurensi tetapi mengurangkan kesesuaian. Memilih tahap pengasingan yang sesuai memerlukan keseimbangan data konsistensi dan keperluan prestasi.

MySQL sesuai untuk aplikasi web dan sistem pengurusan kandungan dan popular untuk sumber terbuka, prestasi tinggi dan kemudahan penggunaan. 1) Berbanding dengan PostgreSQL, MySQL melakukan lebih baik dalam pertanyaan mudah dan operasi membaca serentak yang tinggi. 2) Berbanding dengan Oracle, MySQL lebih popular di kalangan perusahaan kecil dan sederhana kerana sumber terbuka dan kos rendah. 3) Berbanding dengan Microsoft SQL Server, MySQL lebih sesuai untuk aplikasi silang platform. 4) Tidak seperti MongoDB, MySQL lebih sesuai untuk data berstruktur dan pemprosesan transaksi.

Cardinality Indeks MySQL mempunyai kesan yang signifikan terhadap prestasi pertanyaan: 1. Indeks kardinaliti yang tinggi dapat lebih berkesan menyempitkan julat data dan meningkatkan kecekapan pertanyaan; 2. Indeks kardinaliti yang rendah boleh membawa kepada pengimbasan jadual penuh dan mengurangkan prestasi pertanyaan; 3. Dalam indeks bersama, urutan kardinaliti yang tinggi harus diletakkan di depan untuk mengoptimumkan pertanyaan.

Laluan pembelajaran MySQL termasuk pengetahuan asas, konsep teras, contoh penggunaan, dan teknik pengoptimuman. 1) Memahami konsep asas seperti jadual, baris, lajur, dan pertanyaan SQL. 2) Ketahui definisi, prinsip kerja dan kelebihan MySQL. 3) menguasai operasi CRUD asas dan penggunaan lanjutan, seperti indeks dan prosedur yang disimpan. 4) Biasa dengan debugging kesilapan biasa dan cadangan pengoptimuman prestasi, seperti penggunaan rasional indeks dan pertanyaan pengoptimuman. Melalui langkah -langkah ini, anda akan memahami sepenuhnya penggunaan dan pengoptimuman MySQL.

Aplikasi dunia nyata MySQL termasuk reka bentuk pangkalan data asas dan pengoptimuman pertanyaan kompleks. 1) Penggunaan Asas: Digunakan untuk menyimpan dan mengurus data pengguna, seperti memasukkan, menanyakan, mengemas kini dan memadam maklumat pengguna. 2) Penggunaan lanjutan: Mengendalikan logik perniagaan yang kompleks, seperti perintah dan pengurusan inventori platform e-dagang. 3) Pengoptimuman Prestasi: Meningkatkan prestasi dengan menggunakan indeks, jadual partisi dan cache pertanyaan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa