verificar validar saber registro not existe comprobar columna column check mysql

mysql - saber - validar si existe un registro en sql java



MySQL, compruebe si existe una columna en una tabla con SQL (10)

@julio

Gracias por el ejemplo de SQL. Intenté la consulta y creo que necesita una pequeña modificación para que funcione correctamente.

SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ''db_name'' AND TABLE_NAME = ''table_name'' AND COLUMN_NAME = ''column_name''

Eso funcionó para mí.

¡Gracias!

Estoy intentando escribir una consulta que verificará si una tabla específica en MySQL tiene una columna específica, y si no, créela. De lo contrario, no haga nada. Este es un procedimiento realmente sencillo en cualquier base de datos de clase empresarial, pero MySQL parece ser una excepción.

Pensé algo así como

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=''prefix_topic'' AND column_name=''topic_last_update'') BEGIN ALTER TABLE `prefix_topic` ADD `topic_last_update` DATETIME NOT NULL; UPDATE `prefix_topic` SET `topic_last_update` = `topic_date_add`; END;

funcionaría, pero falla mal. ¿Hay alguna manera?


Este trabajo para mí con muestra PDO:

public function GetTableColumn() { $query = $this->db->prepare("SHOW COLUMNS FROM `what_table` LIKE ''what_column''"); try{ $query->execute(); if($query->fetchColumn()) { return 1; }else{ return 0; } }catch(PDOException $e){die($e->getMessage());} }


Esto funciona bien para mi.

SHOW COLUMNS FROM `table` LIKE ''fieldname'';

Con PHP sería algo así como ...

$result = mysql_query("SHOW COLUMNS FROM `table` LIKE ''fieldname''"); $exists = (mysql_num_rows($result))?TRUE:FALSE;


Estoy usando este simple script:

mysql_query("select $column from $table") or mysql_query("alter table $table add $column varchar (20)");

Funciona si ya está conectado a la base de datos.


Lo siguiente es otra forma de hacerlo usando PHP simple sin la base de datos information_schema:

$chkcol = mysql_query("SELECT * FROM `my_table_name` LIMIT 1"); $mycol = mysql_fetch_array($chkcol); if(!isset($mycol[''my_new_column''])) mysql_query("ALTER TABLE `my_table_name` ADD `my_new_column` BOOL NOT NULL DEFAULT ''0''");


Muchas gracias a Mfoo que ha puesto el guión realmente bueno para agregar columnas dinámicamente si no existe en la tabla. He mejorado su respuesta con PHP . La secuencia de comandos también ayuda a encontrar cuántas tablas realmente necesitaban ''Agregar columna'' comando mysql. Solo prueba la receta. Funciona como el encanto.

<?php ini_set(''max_execution_time'', 0); $host = ''localhost''; $username = ''root''; $password = ''''; $database = ''books''; $con = mysqli_connect($host, $username, $password); if(!$con) { echo "Cannot connect to the database ";die();} mysqli_select_db($con, $database); $result=mysqli_query($con, ''show tables''); $tableArray = array(); while($tables = mysqli_fetch_row($result)) { $tableArray[] = $tables[0]; } $already = 0; $new = 0; for($rs = 0; $rs < count($tableArray); $rs++) { $exists = FALSE; $result = mysqli_query($con, "SHOW COLUMNS FROM ".$tableArray[$rs]." LIKE ''tags''"); $exists = (mysqli_num_rows($result))?TRUE:FALSE; if($exists == FALSE) { mysqli_query($con, "ALTER TABLE ".$tableArray[$rs]." ADD COLUMN tags VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL"); ++$new; echo ''#''.$new.'' Table DONE!<br/>''; } else { ++$already; echo ''#''.$already.'' Field defined alrady!<br/>''; } echo ''<br/>''; } ?>


NO coloque ALTER TABLE / MODIFY COLS o cualquier otra operación de mod de tabla dentro de una TRANSACCIÓN. Las transacciones son para poder revertir una falla de QUERY no para ALTERACIONES ... fallará cada vez en una transacción.

Simplemente ejecute una consulta SELECT * en la tabla y verifique si la columna está allí ...


Seleccione solo column_name del esquema de información y ponga el resultado de esta consulta en variable. Luego prueba la variable para decidir si la tabla necesita alteración o no.

PD. No olvide especificar TABLE_SCHEMA para la tabla COLUMNS también.


Solo para ayudar a cualquiera que esté buscando un ejemplo concreto de lo que @Mchi estaba describiendo, pruebe algo como

SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ''my_table'' AND COLUMN_NAME = ''my_column''

Si devuelve falso (cero resultados), entonces sabrá que la columna no existe.


Tiré este procedimiento almacenado junto con un comienzo de los comentarios de @lain anteriores, algo agradable si necesitas llamarlo más de unas pocas veces (y sin necesidad de php):

delimiter // -- ------------------------------------------------------------ -- Use the inforamtion_schema to tell if a field exists. -- Optional param dbName, defaults to current database -- ------------------------------------------------------------ CREATE PROCEDURE fieldExists ( OUT _exists BOOLEAN, -- return value IN tableName CHAR(255), -- name of table to look for IN columnName CHAR(255), -- name of column to look for IN dbName CHAR(255) -- optional specific db ) BEGIN -- try to lookup db if none provided SET @_dbName := IF(dbName IS NULL, database(), dbName); IF CHAR_LENGTH(@_dbName) = 0 THEN -- no specific or current db to check against SELECT FALSE INTO _exists; ELSE -- we have a db to work with SELECT IF(count(*) > 0, TRUE, FALSE) INTO _exists FROM information_schema.COLUMNS c WHERE c.TABLE_SCHEMA = @_dbName AND c.TABLE_NAME = tableName AND c.COLUMN_NAME = columnName; END IF; END // delimiter ;

Trabajando con fieldExists

mysql> call fieldExists(@_exists, ''jos_vm_product'', ''child_option'', NULL) // Query OK, 0 rows affected (0.01 sec) mysql> select @_exists // +----------+ | @_exists | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> call fieldExists(@_exists, ''jos_vm_product'', ''child_options'', ''etrophies'') // Query OK, 0 rows affected (0.01 sec) mysql> select @_exists // +----------+ | @_exists | +----------+ | 1 | +----------+