¿Hay alguna manera de verificar si existe una tabla sin seleccionar y verificar valores de ella?
Es decir, sé que puedo ir SELECT testcol FROM testtable
y verificar el recuento de campos devueltos, pero parece que debe haber una forma más directa / elegante de hacerlo.
Respuestas:
Si quiere ser correcto, use INFORMATION_SCHEMA .
Alternativamente, puedes usar
SHOW TABLES
Si hay una fila en el conjunto de resultados, la tabla existe.
fuente
SELECT...FROM
sintaxis ... Estaba buscando algo así comoEXISTS testtable
Si obtiene un recuento distinto de cero, la tabla existe.
fuente
TEMPORARY TABLE
esto no funciona.Una comparación de rendimiento:
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');
Tenga en cuenta que si está ejecutando esto mucho, como en muchas solicitudes HTML en un período corto, el segundo será mucho más rápido ya que se almacenará en caché un promedio de 200 ms o más rápido.
fuente
Puede consultar la
tables
vista del sistema INFORMATION_SCHEMA :Si no se devuelven filas, entonces la tabla no existe.
fuente
Después de leer todo lo anterior, prefiero la siguiente declaración:
Indica exactamente lo que quieres hacer y en realidad devuelve un 'booleano'.
fuente
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
En lugar de confiar en los errores, puede consultar
INFORMATION_SCHEMA.TABLES
para ver si la tabla existe. Si hay un registro, existe. Si no hay registro, no existe.fuente
SELECT FROM
. :-)Aquí hay una tabla que no es un SELECT * FROM
Obtuve esto de una base de datos profesional, esto es lo que me dijeron:
fuente
Esta solución modificada de arriba no requiere un conocimiento explícito de la base de datos actual. Entonces es más flexible.
fuente
Solo para agregar una forma adicional de hacerlo, y dependiendo de lo que necesite, podría usar un controlador para er_no_such_table error: 1146 como este:
fuente
mostrar tablas como 'nombre_tabla'
si esto devuelve filas> 0, la tabla existe
fuente
Puedes hacer algo como a continuación:
fuente
Ampliando esta respuesta , se podría escribir una función que devuelva VERDADERO / FALSO en función de si existe o no una tabla:
fuente
Este método compacto devuelve 1 si existe 0 si no existe.
Puedes ponerlo en una función mysql
y llámalo
devuelve 1 si existe 0 si no existe.
fuente
Yo uso esto en php.
fuente
Hay varios problemas a tener en cuenta con las respuestas aquí:
1)
INFORMATION_SCHEMA.TABLES
lo hace no incluir tablas temporales.2) Usar cualquier tipo de
SHOW
consulta, es decirSHOW TABLES LIKE 'test_table'
, forzará la devolución de un conjunto de resultados al cliente, que es un comportamiento no deseado para verificar si existe una tabla en el lado del servidor, desde un procedimiento almacenado que también devuelve un conjunto de resultados.3) Como algunos usuarios mencionaron, debes tener cuidado con la forma en que usas
SELECT 1 FROM test_table LIMIT 1
.Si haces algo como:
No obtendrá el resultado esperado si la tabla tiene cero filas.
A continuación se muestra un procedimiento almacenado que funcionará para todas las tablas (incluso TEMPORAL).
Se puede usar como:
El código:
fuente
Este ha sido mi procedimiento EXISTENTE 'ir a' que verifica las tablas temporales y normales. Este procedimiento funciona en MySQL versión 5.6 y superior. El parámetro @DEBUG es opcional. Se supone el esquema predeterminado, pero se puede concatenar a la tabla en la instrucción @s.
Aquí está la declaración de llamada de ejemplo con @debug en:
La variable @tblExists devuelve un valor booleano.
fuente
Ninguna de las opciones, excepto SELECT, no permite el nombre de la base de datos como se usa en SELECT, así que escribí esto:
fuente