una secundaria restricción puede not fila falla externa clave agregar actualizar mysql sql phpmyadmin

secundaria - alter table not null mysql



Agregue la restricción NOT NULL a una columna (4)

Estoy usando PHPMyAdmin e intento agregar la restricción NOT NULL a una columna de mi tabla.

PHPMyAdmin acepta mi siguiente consulta:

ALTER TABLE `wall` MODIFY `token_message` varchar(40) NOT NULL;

Pero aún puedo insertar cadenas vacías (= NULO), no entiendo por qué.

PD: Si me va a dar algunas otras consultas para agregar esta restricción, tenga en cuenta que he probado estos 3 que no funcionan en mi PHPMyAdmin (tipo de error: # 1064 - Usted tiene un error en su sintaxis SQL ; consultar el manual):

ALTER TABLE `wall` ALTER COLUMN `token_message` SET NOT NULL; ALTER TABLE `wall` ALTER COLUMN `token_message` varchar(40) NOT NULL; ALTER TABLE `wall` MODIFY `token_message` CONSTRAINTS token_message_not_null NOT NULL;


Creo que esto es cuestión de restregar tus entradas. Como ya se mencionó, una cadena vacía ('''') no es un valor NULL en sql. La mejor forma de manejar esto es solo permitir actualizaciones a través de un procedimiento de tienda que elimina cadenas vacías, incluso caracteres de espacio:

CREATE PROC InsertIntoMyDb (@MyVarChar VARCHAR(2000)) AS SET @MyVarChar = NULLIF(RTRIM(LTRIM(@MyVarChar)), '''') INSERT INTO [TBL] (MyVarChar) VALUES @MyVarChar

Esto truncará cualquier cantidad de espacios en una cadena vacía, convertirá una cadena vacía en NULL y luego no permitirá que se inserte el valor NULL en función de la restricción que ya tiene en su lugar.


Intenta usar esta consulta

Alter table table_name change column_name column_name datatype(length) definition

es decir,

Alter table wall change tocken_message tocken_message varchar(40) NOT NULL DEFAULT


La sintaxis de alteración de columna de MySQL requiere que se vuelva a especificar completamente la columna. No puede simplemente cambiar un atributo de una columna, debe volver a definirlo por completo:

ALTER TABLE wall MODIFY token_message varchar(40) NOT NULL default ''''

La única versión ''SET'' permitida es cambiar el valor predeterminado.

ref: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html


Usted escribió, "Todavía puedo insertar cadenas vacías (= NULL)", lo que parece un malentendido. En SQL, una cadena vacía no evalúa a NULL, o viceversa. Intente insertar una cadena vacía y hacer SELECT from wall where token_message is NULL . Deberías recuperar cero filas. Luego intente hacer una inserción donde especifique NULL (sin comillas) como el valor de su columna, y debería obtener el mensaje de error esperado.

Si esas pruebas funcionan como se esperaba, todo está bien, y su problema es que realmente quiere evitar que se inserten cadenas en blanco. Consulte esta pregunta para obtener sugerencias, o simplemente busque cadenas en blanco durante la validación, antes de la consulta.