2012-07-03 19 views
115

que tiene el siguiente error al intentar cambiar el tipo de datos de una columna y el establecimiento de un nuevo valor predeterminado:¿Cómo modificar una columna y cambiar el valor predeterminado?

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}'; 

ERROR 1064 (42000): Usted tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'VARCHAR (255) NOT NULL DEFAULT SET '{}'' en la línea 1

+0

que usted no piensa necesita SET antes DEFAULT –

Respuesta

180
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}'; 

Una segunda posibilidad, que hace el mismo (gracias a juergen_d):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}'; 
+8

La 'columna' es opti onal Solo podría usar 'ALTER TABLE foobar_data MODIFY col VARCHAR (255) NOT NULL DEFAULT '{}';' o 'ALTER TABLE foobar_data CHANGE col col VARCHAR (255) NOT NULL DEFAULT '{}';' y el resultado será el mismo . – kapad

65

Como seguimiento, si sólo desea establecer un valor predeterminado, bastante seguro de que puede utilizar la sintaxis .. ALTER SET. Simplemente no pongas todas las otras cosas ahí. Si va a incluir el resto de la definición de columna, use la sintaxis MODIFICAR o CAMBIAR según la respuesta aceptada.

De todos modos, la sintaxis ALTER para establecer un valor predeterminado de columna, (ya que eso es lo que estaba buscando cuando vine aquí):

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal'; 

Por el cual 'literal' también podría ser un número (por ejemplo ...SET DEFAULT 0) . No lo he intentado con ...SET DEFAULT CURRENT_TIMESTAMP, pero ¿por qué no?

+3

Parece que no funciona para DEFAULT CURRENT_TIMESTAMP para mí ... – Malaise

+2

También current_timestamp no funcionaba para mí si se citaba. Tuve que usar lo siguiente: 'ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL PREDETERMINADO current_timestamp;' – Nereis

+2

+1 La mejor respuesta para mí, porque de esa manera no necesito especificar el tipo de columna y otras cosas que no ¡cambio! – user2342558

1

En caso de que lo anterior no funciona para usted (es decir: el que está trabajando nueva SQL o Azure) intente lo siguiente:

1) gota restricción de columna existente (si lo hay):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint 

2) crear una nueva:

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint DEFAULT getdate() FOR column_name; 
4

Si desea agregar valor predeterminado de la columna ya creado, Thi s funciona para mí:

ALTER TABLE Persons 
ALTER credit SET DEFAULT 0.0'; 
0

Por DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename 
CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; 

Atención: doble declaración nombrecolumna

Extracción CURRENT_TIMESTAMP DEFAULT:

ALTER TABLE tablename 
ALTER COLUMN columnname1 DROP DEFAULT, 
ALTER COLUMN columnname2 DROPT DEFAULT; 
Cuestiones relacionadas