¿Cuál es la sintaxis para colocar una columna en una tabla MySQL, si esa columna existe en la versión 4.0.18?MySQL Modificar la sintaxis para soltar una columna si existe
Respuesta
Para MySQL, no hay ninguno:MySQL Feature Request.
Permitir que esto sea posiblemente una muy mala idea, de todos modos: IF EXISTS
indica que está ejecutando operaciones destructivas en una base de datos con (para usted) estructura desconocida. Puede haber situaciones en las que esto sea aceptable para el trabajo local rápido y sucio, pero si tiene la tentación de ejecutar una declaración de este tipo contra datos de producción (en una migración, etc.), está jugando con fuego.
Pero si insistes, no es difícil simplemente verificar la existencia primero en el cliente o detectar el error.
MariaDB también admite las siguientes comenzando con 10.0.2:
DROP [COLUMNA] [IF EXISTS] col_name
i. mi.
ALTER TABLE my_table DROP IF EXISTS my_column;
Pero podría decirse que es una mala idea confiar en una característica no estándar respaldada solo por una de varias versiones de MySQL.
No hay soporte de nivel de idioma para esto en MySQL. Aquí hay una solución temporal que involucra los metadatos MySQL information_schema en 5.0+, pero no abordará su problema en 4.0.18.
drop procedure if exists schema_change;
delimiter ';;'
create procedure schema_change() begin
/* delete columns if they exist */
if exists (select * from information_schema.columns where table_schema = schema() and table_name = 'table1' and column_name = 'column1') then
alter table table1 drop column `column1`;
end if;
if exists (select * from information_schema.columns where table_schema = schema() and table_name = 'table1' and column_name = 'column2') then
alter table table1 drop column `column2`;
end if;
/* add columns */
alter table table1 add column `column1` varchar(255) NULL;
alter table table1 add column `column2` varchar(255) NULL;
end;;
delimiter ';'
call schema_change();
drop procedure if exists schema_change;
Escribí información más detallada en un blog post.
Pensé que era importante resumir la contribución de DrHyde como comentario, porque no es evidente cuando se trata de una respuesta propia. Asegúrese de verificar que su no modificar una base de datos diferente: SELECT * FROM INFORMATION_SCHEMA.COLUMNS DONDE nombre_tabla = "país" y nombre_columna = "updated_at" Y esquema_tabla = BASE DE DATOS() \ G – Homer6
Si no quieren para recibir advertencias de "drop procedure if exists schema_change;" agregar "set sql_notes = 0;" antes de la primera línea y agrega "set sql_notes = 1;" después de la última línea. Detalles -> http://stackoverflow.com/questions/27616564/suppress-mysql-warnings – csonuryilmaz
obras respuesta de Chase Seibert, pero me gustaría añadir que si tiene varios esquemas que desee alterar la SELECT así:
select * from information_schema.columns where table_schema in (select schema()) and table_name=...
Soy consciente de este hilo es bastante viejo ahora, pero yo estaba teniendo el mismo problema. Esta fue mi solución básica con MySQL Workbench, pero funcionó bien ...
- conseguir un nuevo editor de SQL y ejecutar SHOW TABLES para obtener una lista de las tablas
- seleccionar todas las filas, y elija copiar al portapapeles (sin comillas) en el menú contextual
- pegar la lista de nombres en otra pestaña del editor
- escriba su consulta, es decir, ALTER TABLE
x
DROPa
; - hacer algo de copiar y pegar, por lo que terminan con la consulta independiente para cada tabla
- Toggle si el banco de trabajo debe detenerse cuando se produce un error
- Hit ejecutar y mirar a través del registro de salida
cualquier mesas que tenían la mesa ahora tienes no cualquier tabla de los cuales no se han mostrado un error en los registros
entonces usted puede encontrar/reemplazar 'drop a
' cambiarlo a 'agregar la columna NULL b
INT' etc una d ejecutar todo de nuevo ....
un poco torpe, pero al final obtienes el resultado final y puedes controlar/controlar todo el proceso y recuerda guardar tus scripts sql en caso de que los necesites nuevamente.
Sé que este es un hilo antiguo, pero hay una manera simple de manejar este requisito sin utilizar procedimientos almacenados. Esto puede ayudar a alguien.
set @exist_Check := (
select count(*) from information_schema.columns
where TABLE_NAME='YOUR_TABLE'
and COLUMN_NAME='YOUR_COLUMN'
and TABLE_SCHEMA=database()
) ;
set @sqlstmt := if(@exist_Check>0,'alter table YOUR_TABLE drop column YOUR_COLUMN', 'select ''''') ;
prepare stmt from @sqlstmt ;
execute stmt ;
Espero que esto ayude a alguien, como a mí (después de mucho ensayo y error).
¡sí! Me ayudó mucho hoy. Gracias. –
- 1. MySQL: ¿Cómo agregar una columna si aún no existe?
- 2. ¿Agregar una columna si no existe para todas las tablas?
- 3. MySQL disparador 'actualización de la columna' sintaxis
- 4. Disparo de MySQL si existe una condición
- 5. Mysql - Altere una columna para ser AUTO_INCREMENTO
- 6. MySQL: Insertar si existe una clave externa
- 7. mysql create view only si no existe
- 8. ¿Qué sucede si dejo caer una columna MySQL sin soltar primero su índice?
- 9. Unirse si existe en una consulta MySQL
- 10. Servidor SQL Modificar la columna calculada
- 11. ¿Existe una convención de nombres para MySQL?
- 12. ¿Cómo modificar una columna y cambiar el valor predeterminado?
- 13. Borrar, Truncar o Soltar para limpiar una tabla en MySQL
- 14. Agregue una columna a una tabla, si no existe
- 15. MySQL, compruebe si existe una columna en una tabla con SQL
- 16. Cómo averiguo si existe una columna en una VB.Net DataRow
- 17. ¿Cómo modifico una columna MySQL para permitir NULL?
- 18. ¿Cómo puedo verificar si la columna de la tabla mysql existe?
- 19. Cómo modificar una columna y una columna calculada
- 20. MODIFICAR COLUMNA en oráculo - ¿Cómo comprobar si una columna es anulable antes de establecerse como anulable?
- 21. MySQL: ¿Cómo modificar los procedimientos almacenados atómicamente?
- 22. SQLite Modificar columna
- 23. ¿Cómo verifico si existe una columna en SQL Server?
- 24. MySQL Unir sintaxis para una relación de uno a muchos
- 25. MySQL: Inserciones múltiples para una sola columna
- 26. Compruebe el valor si existe en la columna
- 27. MySql php: compruebe si Row existe
- 28. Comprobando si el usuario de mysql existe
- 29. MySQL Seleccione otra fila si no existe
- 30. ¿Existe una sintaxis para crear una subclase anónima en C#?
¿Hay alguna manera de hacerlo en SQL puro? – Tom
Wow. Mencionado en 2005 - hace 9 años. Supongo que esta es la lista de prioridades ... – crmpicco
MariaDB lo admite a partir de 10.0.2 – Dfr