Apakah ada cara untuk memeriksa apakah ada tabel tanpa memilih dan memeriksa nilai dari itu?
Artinya, saya tahu saya bisa pergi SELECT testcol FROM testtable
dan memeriksa jumlah bidang yang dikembalikan, tetapi tampaknya harus ada cara yang lebih langsung / elegan untuk melakukannya.
Jawaban:
Jika Anda ingin benar, gunakan INFORMATION_SCHEMA .
Atau, Anda dapat menggunakan
SHOW TABLES
Jika ada baris di resultset, tabel ada.
sumber
SELECT...FROM
sintaksis ... Saya sedang mencari sesuatu sepertiEXISTS testtable
jika Anda mendapatkan jumlah yang tidak nol, tabel ada.
sumber
TEMPORARY TABLE
ini tidak berfungsi.Perbandingan kinerja:
322 ms:
show tables like 'table201608';
691 ms:
select 1 from table201608 limit 1;
319 ms:
SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');
Catatan jika Anda sering menjalankan ini - seperti banyak permintaan HTML dalam waktu singkat - tanggal 2 akan jauh lebih cepat karena akan di-cache rata-rata 200 ms atau lebih cepat.
sumber
Anda dapat menanyakan
tables
tampilan sistem INFORMATION_SCHEMA :Jika tidak ada baris yang dikembalikan, maka tabel tidak ada.
sumber
Setelah membaca semua hal di atas, saya lebih suka pernyataan berikut:
Ini menunjukkan apa yang ingin Anda lakukan dan sebenarnya mengembalikan 'boolean'.
sumber
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Daripada mengandalkan kesalahan, Anda dapat meminta
INFORMATION_SCHEMA.TABLES
untuk melihat apakah tabel itu ada. Jika ada catatan, itu ada. Jika tidak ada catatan, itu tidak ada.sumber
SELECT FROM
. :-)Ini adalah tabel yang bukan SELECT * FROM
Mendapat ini dari database pro, di sini adalah apa yang saya diberitahu:
sumber
Solusi yang dimodifikasi dari atas ini tidak memerlukan pengetahuan eksplisit tentang database saat ini. Maka lebih fleksibel.
sumber
Hanya untuk menambahkan cara tambahan untuk melakukannya, dan tergantung pada apa yang Anda perlukan, Anda dapat menggunakan penangan untuk kesalahan er_no_such_table : 1146 seperti ini:
sumber
tampilkan tabel seperti 'table_name'
jika ini mengembalikan baris> 0 tabel ada
sumber
Anda dapat melakukan sesuatu seperti di bawah ini:
sumber
Memperluas jawaban ini , seseorang dapat lebih lanjut menulis fungsi yang mengembalikan BENAR / SALAH berdasarkan apakah ada tabel:
sumber
Metode ringkas ini mengembalikan 1 jika ada 0 jika tidak ada.
Anda dapat dimasukkan ke dalam fungsi mysql
dan menyebutnya
kembalikan 1 jika ada 0 jika tidak ada.
sumber
Saya menggunakan ini di php.
sumber
Ada beberapa masalah yang perlu diperhatikan dengan jawaban di sini:
1)
INFORMATION_SCHEMA.TABLES
tidak tidak termasuk tabel SEMENTARA.2) Menggunakan segala jenis
SHOW
permintaan, yaituSHOW TABLES LIKE 'test_table'
, akan memaksa pengembalian set hasil ke klien, yang merupakan perilaku yang tidak diinginkan untuk memeriksa apakah tabel ada di sisi server, dari dalam prosedur tersimpan yang juga mengembalikan set hasil.3) Seperti yang disebutkan beberapa pengguna, Anda harus berhati-hati dengan cara Anda menggunakannya
SELECT 1 FROM test_table LIMIT 1
.Jika Anda melakukan sesuatu seperti:
Anda tidak akan mendapatkan hasil yang diharapkan jika tabel memiliki nol baris.
Di bawah ini adalah prosedur tersimpan yang akan bekerja untuk semua tabel (bahkan SEMENTARA).
Dapat digunakan seperti:
Kode:
sumber
Ini telah menjadi prosedur 'pergi ke' untuk saya yang memeriksa temp dan tabel normal. Prosedur ini berfungsi di MySQL versi 5.6 ke atas. Parameter @DEBUG adalah opsional. Skema default diasumsikan, tetapi dapat digabungkan ke tabel dalam pernyataan @s.
Berikut ini contoh pernyataan panggilan dengan @debug pada:
Variabel @tblExists mengembalikan boolean.
sumber
Tak satu pun dari opsi kecuali SELECT tidak mengizinkan nama database seperti yang digunakan dalam SELECT, jadi saya menulis ini:
sumber