테이블 에서 값을 선택하고 확인 하지 않고 테이블이 존재하는지 확인하는 방법 이 있습니까?
즉, 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