2012-05-22 24 views
5

Estoy ejecutando MySql en ubuntu 10.10. Creé una tabla llamada 'employee' que tiene 3 nombres de campo empno, nombre y salario. Algunas pocas entidades insertadas. En el medio del proceso quiero cambiar el atributo de salario como 'NOT NULL'. Me alterar la tabla como¿Por qué MySQL permite actualizar una columna NOT NULL a NULL?

ALTER TABLE employee MODIFY salary int(10) NOT NULL; 

consulta ejecutada. Quería poner a prueba mediante el uso de comandos,

UPDATE employee SET salary=NULL; 

Query OK, 15 rows affected, 15 warnings (0.06 sec) 
Rows matched: 15 Changed: 15 Warnings: 15 

también dio advertencias " (Code 1048): Column 'salary' cannot be null " (repite para cada fila)

pero cuando vi mi mesa, todos los salarios eran ceros ('0').

mismas consultas dan lugar a error en lugar de la advertencia en MySQL de WINDOWS XP

me registré ambos motores InnoDB como MyISAM, pero mismo resultado. Por favor, ayúdenme a saber qué sucedió al lado del procesamiento.

+2

¿Cuál es tu pregunta? Establece su campo en 'not null' y lo establece en NULL. De manera predeterminada, será '0' como se espera. ¿Qué están haciendo en Windows según usted? ¿Configurando el campo a 'NULL'? Eso sería raro. – Nanne

+0

¿Qué quiere decir exactamente con "trabajar bien en' XP' "? – Quassnoi

+0

@Nanne y @Quassnoi En Windows no permite valores nulos actualizar y muestra los salarios originales, pero aquí muestra todos los ceros. Sí, puede ser raro, pero para mí los resultados fueron inesperados. :) – kik

Respuesta

11

No debe tener SQL_MODE establecido en la instalación de Ubuntu estricta.

Edición

SET SQL_MODE='STRICT_ALL_TABLES' 

o añadir

SQL_MODE='STRICT_ALL_TABLES' 

bajo [mysqld] a su my.cnf en Ubuntu.

+0

+1 Eso fue increíble. :) pero ¿de dónde saqué el archivo my.cnf en ubuntu? – kik

+0

'/ etc/mysql/my.cnf' Creo pero será mejor que lo compruebes. – Quassnoi

+0

Esa era la ruta correcta, pero dice "no se pudo guardar el archivo en /etc/mysql/my.cnf. ¿Guardar con un nombre diferente?" – kik

3

no veo el problema, se establece la columna para NOT NULL, (que no permite valores NULL) y ahora no va a dejar que lo establece en NULL, lo que sería el comportamiento esperado.

La razón por la que tiene 0 en su base de datos es porque 0 sería el resultado de convertir NULL a un int.

+0

El resultado de convertir 'NULL' en' INT' es '' NULL'. – Quassnoi

+0

+1 para clarificado casi. Pero ¿por qué no está haciendo lo mismo en Windows? ¿Por qué está dando Zeros en UBUNTU? :) – kik

+0

Creo que Quassnoi lo ha clavado :) – Dunhamzzz