Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Membuka Semula Jadual\' dalam Jadual Sementara MySQL?

Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Membuka Semula Jadual\' dalam Jadual Sementara MySQL?

Susan Sarandon
Susan Sarandonasal
2024-11-19 03:05:03203semak imbas

How to Workaround the

Menangani Ralat "Tidak dapat membuka semula jadual" dalam MySQL

Dalam pemprosesan data, keupayaan untuk menggunakan jadual beberapa kali dalam pertanyaan yang kompleks selalunya penting. Walau bagaimanapun, apabila bekerja dengan jadual sementara dalam MySQL, operasi yang kelihatan asas ini menghadapi ralat "Tidak dapat membuka semula jadual" yang mengecewakan.

Latar Belakang

Seperti yang diterangkan oleh Kris, pertanyaan kompleks yang melibatkan berbilang INNER JOINS pada jadual sementara mengakibatkan ralat. Ini berlaku kerana MySQL tidak membenarkan jadual sementara dibuka beberapa kali dalam pertanyaan yang sama.

Penyelesaian

Untuk menavigasi had ini, penyelesaian yang mudah namun berkesan adalah dengan pendua jadual sementara, pada asasnya mencipta dua versi yang sama. Ini berfungsi terutamanya apabila jadual sementara agak kecil, seperti yang sering berlaku.

Pelaksanaan

Langkah berikut menggariskan pelaksanaan penyelesaian ini:

  1. Buat jadual sementara:
CREATE TEMPORARY TABLE search (baseID INT, condition TEXT);
  1. Isi jadual sementara dengan data:
INSERT INTO search (baseID, condition) VALUES (1, 'condition1'), (1, 'condition2'), ...;
  1. Sekarang, salin jadual sementara:
CREATE TEMPORARY TABLE search_copy AS SELECT * FROM search;
  1. Anda kini boleh menggunakan jadual pendua seberapa banyak yang perlu dalam pertanyaan kompleks anda:
SELECT
  *
FROM search
INNER JOIN search_copy f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search_copy f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search_copy fN ON fN.baseID = search.baseID AND fN.condition = conditionN;

Faedah

Penyelesaian ini menawarkan beberapa kelebihan:

  • Kesederhanaan: Ia mudah untuk dilaksanakan, walaupun untuk pembangun junior.
  • Keberkesanan: Ia menghapuskan ralat "Tidak dapat membuka semula jadual", membenarkan pertanyaan kompleks dengan jadual sementara.
  • Kecekapan ruang: Mendua jadual sementara tidak tidak menggunakan ruang cakera tambahan pada pelayan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Membuka Semula Jadual\' dalam Jadual Sementara MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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