SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.07.2010 18:24:00

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Проверка существования таблицы с определённым именем

Как можно проверить существование таблицы с определённым именем?

Неактивен

 

#2 15.07.2010 18:43:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проверка существования таблицы с определённым именем

SHOW TABLES
или
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename';

А какой практический смысл такого запроса?

Неактивен

 

#3 18.07.2010 07:25:41

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Проверка существования таблицы с определённым именем

Спасибо за ответ.
Смысл данного запроса следующий: Если таблицы нет, то она должна будет создаваться автоматически, чтобы не лезть каждый раз в phpmyadmin. Просто и удобно при начальной установке сайта smile

CREATE TABLE IF NOT EXISTS мне кажется неподходящим в этом случае.

Неактивен

 

#4 19.07.2010 11:08:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проверка существования таблицы с определённым именем

А почему не подходящим? По сути, Вы делаете как раз это, нет?

Неактивен

 

#5 29.08.2010 18:14:08

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Проверка существования таблицы с определённым именем

paulus написал:

А почему не подходящим? По сути, Вы делаете как раз это, нет?

С запозданием но отвечу. Не хочется лишний раз долбить базу запросом CREATE TABLE. Не знаю на сколько я прав, но мне кажется, что если таблица в 99 случаях из 100 уже создана, и только в 1 случае её требуется создать, то быстрее будет проверять существование таблицы, а уж потом, если её нет, то обращаться к mysql  с запросом CREATE TABLE.
Я прав или нет? Это будет быстрее?

Отредактированно sito-corito (29.08.2010 18:14:58)

Неактивен

 

#6 29.08.2010 23:57:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проверка существования таблицы с определённым именем

Как показал эксперимент, CREATE TABLE для существующей таблицы быстрее, чем выборка из INFORMATION_SCHEMA

mysql> show profiles;
+----------+------------+-----------------------------------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                                         |
+----------+------------+-----------------------------------------------------------------------------------------------+
|        1 | 0.04164800 | select table_name from information_schema.tables where table_schema='test' and table_name='a' |
|        2 | 0.01877300 | create table if not exists a (id int)                                                         |

|        4 | 0.00187700 | select table_name from information_schema.tables where table_schema='test' and table_name='a' |
|        5 | 0.00009700 | create table if not exists a (id int)                                                         |
+----------+------------+-----------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)


Но в любом случае, это не принципиально, так как первоначальная настройка сайта происходит не ежесекундно и, даже, не каждый день.

Неактивен

 

#7 30.08.2010 18:45:48

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проверка существования таблицы с определённым именем

Также важно понимать, что при доступе к строке INFORMATION_SCHEMA материализуются
поля этой строки, т.е. считаются размер данных, индексов и т.п. Даже если нужно оттуда
вытащить только имя.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson