2010-10-06 34 views
101

Estoy usando mysql y necesito actualizar una columna con un valor nulo. He intentado esto de muchas maneras diferentes y lo mejor que he obtenido es una cadena vacía.Cómo actualizar la columna con valor nulo

¿Hay una sintaxis especial para hacer esto?

+4

¿La columna permite un valor NULL? – poke

+0

Sí, por supuesto. :) – jim

+6

Tabla de ACTUALIZACIÓN columna SET = NULL DONDE ...; ¿No funciona? –

Respuesta

158

Sin sintaxis especial:

CREATE TABLE your_table (some_id int, your_column varchar(100)); 

INSERT INTO your_table VALUES (1, 'Hello'); 

UPDATE your_table 
SET your_column = NULL 
WHERE some_id = 1; 

SELECT * FROM your_table WHERE your_column IS NULL; 
+---------+-------------+ 
| some_id | your_column | 
+---------+-------------+ 
|  1 | NULL  | 
+---------+-------------+ 
1 row in set (0.00 sec) 
+0

Gracias Daniel. Estoy bastante convencido de que este problema puede estar en mi código de aplicación – jim

27

NULL is a special value in SQL. Así que para anular una propiedad, hacer esto:

UPDATE table SET column = NULL; 
+0

Gumbo, lo he intentado pero todo lo que obtengo es una cadena vacía. – jim

+0

Ahora, déjenme aclarar. A través de php estoy usando PDO y actualizando a través de una consulta. – jim

+0

El manual de MySQL indica que si la columna no permite valores NULOS, establecerlo en NULO dará como resultado el valor predeterminado para el tipo de datos (por ejemplo, una cadena vacía). ¿Estás al 100% de que tu columna permita NULL? ¿Puedes mostrarnos CREATE TABLE? –

0

si sigue

UPDATE table SET name = NULL 

entonces el nombre es "" no nulo en MYSQL significa su consulta

SELECT * FROM table WHERE name = NULL no funciona o decepciona usted mismo

0

Sospecho que el problema aquí es que las comillas se escribieron como literales en el valor de su cadena. Puede establecer estas columnas en nulo usando:

UPDATE table SET col=NULL WHERE length(col)<3; 

Usted debe, por supuesto primero comprobar que estos valores son de hecho "" con algo como:

SELECT DISTINCT(col) FROM table WHERE length(col)<3; 
0

uso is en lugar de =

Ej : Select * from table_name where column is null

1

Otra posible razón para la cadena vacía, en lugar de true null es que el campo es un índice o es parte de un índice. Esto me pasó a mí: usando phpMyAdmin, edité la estructura de un campo en una de mis tablas para permitir NULLs marcando la casilla de verificación "nulo" y presionando el botón "Guardar". "El precio de la tabla se ha modificado con éxito", así que supuse que el cambio sucedió, pero no fue así. Después de hacer un ACTUALIZACIÓN a establecer todos aquellos campos que NULL, que eran, en cambio, establece en cadenas vacías, por lo que tomó un vistazo a la estructura de la tabla de nuevo y vieron que la columna de "nulo" para ese campo se estableció en 'no'. ¡Entonces me di cuenta de que el campo formaba parte de la clave principal !

6

Recuerde mirar si su columna puede ser nula. Puede hacerlo utilizando

mysql> desc my_table; 

Si su columna no puede ser nulo, cuando se establece el valor en null será el valor fundido a ella.

Aquí un ejemplo

mysql> create table example (age int not null, name varchar(100) not null); 
mysql> insert into example values (null, "without num"), (2 , null); 
mysql> select * from example; 
+-----+-------------+ 
| age | name  | 
+-----+-------------+ 
| 0 | without num | 
| 2 |    | 
+-----+-------------+ 
2 rows in set (0.00 sec) 

mysql> select * from example where age is null or name is null; 
Empty set (0.00 sec) 
3

para aquellos que enfrentan un problema similar, he encontrado que cuando 'simular' una consulta SET = NULL, phpMyAdmin arrojaría un error. Es un arenque rojo ...solo ejecute la consulta y todo estará bien.

+0

Gracias, estaba aquí buscando porque PHPMyAdmin afirmó que había una palabra clave no reconocida cerca de NULL. Después de leer su respuesta, ejecuté la consulta y se ejecutó según lo previsto. – dading84

1

Si desea establecer el valor nulo se utiliza la actualización consulta valor de columna NULL (sin comillas) actualización del conjunto nombredetabla nombrecolumna = NULL

Sin embargo, si está editando directamente el valor del campo dentro de la mesa de trabajo de MySQL a continuación, utilizar (Esc + Supr) golpe de teclado para insertar valor nulo en la columna seleccionada

5

uso IS en lugar de = Esto va a resolver su problema ejemplo de sintaxis:

UPDATE studentdetails 
SET contactnumber = 9098979690 
WHERE contactnumber IS NULL; 
+0

MUY ÚTIL, MUCHAS GRACIAS –

+0

de nada me puede preguntar cualquier consulta relacionada con sql –

+1

¡gracias, esto funcionó perfectamente! –

-1

En primer lugar, la columna en su TABLE_NAME debe aceptar NULL y es probable que ya reconocen que, con el fin de tener value NULL, es necesario utilizar

Eg: UPDATE TABLE_NAME SET column_name = NULL 
    Eg: instead of using column_name = 'NULL'. 


    So, in a situation where one use a "selected value" to update a table       
    in database, such as the following very simple example, 

    Part one, 
    Condition of the variable: 
    Checkbox(name = "checkbox") 
    Eg: if not click, $_POST["checkbox"] = "", 
    Eg: if clicked, $_POST["checkbox"] = "1". 

    Now, we must try to make this $_POST["checkbox"] to convert the value ""   
    to NULL and update to the database table. 

    An alternative way that I found is to use echo and assign echo value to   
    a $variable 

    of course, you already know how to use if {} else {}. 

    To save echo value to a $variable, I did the following: 

    Eg: ob_start() 

    Eg: echo  <==hint 1: selected value here. 

    Eg: $variable1 = ob_get_contents() 

    Eg: ob_end_clean() 



    Then, you need to do this again, 

    Eg: ob_start() 

    Eg: echo <==hint 2: command line + selected value here. 

    Eg: $variable2 = ob_get_contents() 

    Eg: ob_end_clean() 


    MYSQL will be something like the following: 

    Eg: UPDATE table_name SET 
    Eg: name = '$name', 
    Eg: $variable2, 
    Eg: date = '$date' 
    Eg: WHERE id = '$id'; 

    see the trick is to how to make 
    Eg: $variable2 to show either 

    Eg: checkbox = NULL 

    or to show 
    Eg: checkbox = '1' 

    Hope this can give you a guide to solve this problem. 
    I think you have enough knowledge to fill in the blanks. Good luck. 


    Additional note: you can do the same for (MYSQL) INSERT INTO 
Cuestiones relacionadas