[mysql] “select from”을 사용하지 않고 테이블이 존재하는지 확인

테이블 에서 값을 선택하고 확인 하지 않고 테이블이 존재하는지 확인하는 방법 이 있습니까?

즉, SELECT testcol FROM testtable돌아가서 반환되는 필드 수를 확인할 수는 있지만 더 직접적이고 우아한 방법이 있어야합니다.



답변

정확하려면 INFORMATION_SCHEMA를 사용하십시오 .

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

또는 사용할 수 있습니다 SHOW TABLES

SHOW TABLES LIKE 'yourtable';

결과 집합에 행이 있으면 테이블이 존재합니다.


답변

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

0이 아닌 수를 얻으면 테이블이 존재합니다.


답변

성능 비교 :

  • 약 11,000 개의 테이블이있는 DB의 MySQL 5.0.77
  • 캐시되지 않도록 최근에 사용하지 않은 테이블을 선택합니다.
  • 시도당 평균 10 회 이상 (참고 : 캐싱을 피하기 위해 다른 테이블로 수행됨).

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');

단기간에 많은 HTML 요청과 같이이 작업을 많이 수행하면 평균 200ms 이상으로 캐시되므로 두 번째는 훨씬 빠릅니다.


답변

INFORMATION_SCHEMA tables시스템 뷰를 쿼리 할 수 ​​있습니다 .

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

행이 반환되지 않으면 테이블이 존재하지 않는 것입니다.


답변

위의 내용을 모두 읽은 후 다음 진술을 선호합니다.

SELECT EXISTS(
       SELECT * FROM information_schema.tables
       WHERE table_schema = 'db'
       AND table_name = 'table'
);

그것은 당신이하고 싶은 것을 정확하게 나타내고 실제로 ‘부울’을 반환합니다.


답변

오류에 의존하는 대신 INFORMATION_SCHEMA.TABLES테이블이 존재하는지 쿼리 할 수 있습니다. 레코드가 있으면 존재합니다. 레코드가 없으면 존재하지 않습니다.


답변

다음은 SELECT * FROM이 아닌 테이블입니다.

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

데이터베이스 전문가로부터 이것을 얻었습니다. 내가 들었던 것은 다음과 같습니다.

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