Pertanyaan Periksa apakah tabel ada tanpa menggunakan "pilih dari"


Apakah ada cara untuk memeriksa apakah ada meja tanpa memilih dan memeriksa nilai dari itu?

Artinya, saya tahu saya bisa pergi SELECT testcol FROM testtable dan periksa jumlah kolom yang dikembalikan, tetapi tampaknya harus ada cara yang lebih langsung / elegan untuk melakukannya.


111
2018-01-12 01:42


asal


Jawaban:


Anda tidak perlu menghitung apa pun.

SELECT 1 FROM testtable LIMIT 1;

Jika tidak ada kesalahan, tabel ada.

Atau, jika Anda ingin benar, gunakan INFORMATION_SCHEMA.

SELECT * 
FROM information_schema.tables
WHERE table_schema = 'yourdb' 
    AND table_name = 'testtable'
LIMIT 1;

Atau, Anda dapat menggunakan SHOW TABLES

SHOW TABLES LIKE 'yourtable';

Jika ada baris di resultset, tabel ada.


213
2018-01-12 01:44



SELECT count(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = 'your_db_name') AND (TABLE_NAME = 'name_of_table')

jika Anda mendapatkan hitungan non-nol, meja itu ada.


47
2018-01-12 01:45



Perbandingan kinerja:

  • MySQL 5.0.77, pada db yang memiliki sekitar 11.000 tabel.
  • Memilih tabel yang tidak digunakan baru-baru ini sehingga tidak di-cache.
  • Rata-rata lebih dari 10 mencoba masing-masing. (Catatan: dilakukan dengan tabel yang berbeda untuk menghindari caching).

322ms: show tables like 'table201608';

691ms: select 1 from table201608 limit 1;

319ms: SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');

Catatan jika Anda menjalankan banyak hal ini - seperti lebih dari banyak permintaan HTML dalam waktu singkat - yang kedua akan lebih cepat karena akan di-cache rata-rata 200 ms atau lebih cepat.


20
2017-08-04 22:51



Anda dapat menanyakan INFORMATION_SCHEMA tables tampilan sistem:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'testtable';

Jika tidak ada baris yang dikembalikan, maka tabel tidak ada.


11
2018-01-12 01:46



Daripada mengandalkan kesalahan, Anda dapat melakukan kueri INFORMATION_SCHEMA.TABLES untuk melihat apakah meja itu ada. Jika ada catatan, itu ada. Jika tidak ada catatan, itu tidak ada.


6
2018-01-12 01:46



Berikut ini adalah tabel yang bukan SELECT * FROM

SHOW TABLES FROM `db` LIKE 'tablename'; //zero rows = not exist

Punya ini dari database pro, di sini adalah apa yang saya diberitahu:

select 1 from `tablename`; //avoids a function call
select * from IMFORMATION_SCHEMA.tables where schema = 'db' and table = 'table' // slow. Field names not accurate
SHOW TABLES FROM `db` LIKE 'tablename'; //zero rows = not exist

3
2017-08-02 13:40



tampilkan tabel seperti 'table_name'

jika ini mengembalikan baris> 0 tabel yang ada


2
2017-10-16 00:49



Hanya untuk menambahkan cara ekstra untuk melakukannya, dan tergantung pada apa yang Anda butuhkan untuk Anda bisa menggunakan pawang untuk er_no_such_table error: 1146 menyukai ini:

DELIMITER ;;
CREATE PROCEDURE `insert_in_my_table`(in my_var INT)
BEGIN
   -- Error number for table not found
   DECLARE CONTINUE HANDLER FOR 1146
   BEGIN
      -- table doesn't exists, do something...
      CREATE TABLE my_table(n INT);
      INSERT INTO my_table (n) values(my_var);
   END;
      -- table does exists, do something...
      INSERT INTO my_table (n) values(my_var);
END ;;
DELIMITER ;

1
2018-04-19 02:42