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 |
+----------+