2011-12-19 21 views
12

Espero que esta no sea una pregunta tonta. Puede establecer un valor predeterminado para todas las variables o una función para cuando se inserta. pero si no se requiere insertar el campo y no permite valores nulos, ¿cuál es el valor "en blanco" que ve en phpMyAdmin? en una consulta ¿se devuelve como una cadena vacía, etc.?¿Cuál es el valor predeterminado para un campo si no se proporciona un valor predeterminado?

al tratar de resolverlo, quiero consultar todos los registros de manera que el valor para una columna específica en ese registro no sea "vacío" o en blanco o lo que sea.

gracias.

Respuesta

22

refiriéndose a la manual ,

Para la entrada de datos para una columna NOT NULL que no tiene explícitamente DEFAULT cláusula, si una instrucción INSERT o REPLACE incluye ningún valor para la columna de , o una instrucción UPDATE establece la columna a NULL, MySQL trata la columna de acuerdo con el modo SQL en vigor en el momento:

  • Si estricta El modo SQL no está habilitado, MySQL establece la columna en el valor implícito predeterminado para el tipo de datos de columna.
  • Si el modo estricto está habilitado, se produce un error para las tablas transaccionales y la declaración se retrotrae. Para las tablas no transaccionales, se produce un error
    , pero si esto ocurre para la segunda fila o fila subsiguiente de una instrucción de varias filas, las filas anteriores se habrán insertado.

Entonces, la pregunta puede ser ahora, ¿cuáles son los valores por defecto implícito para los diversos tipos de datos de columna? Aquí van:

defecto implícitos se definen como sigue:

  • Para tipos numéricos, el valor predeterminado es 0, con la excepción de que para los tipos de enteros o de punto flotante declaran con AUTO_INCREMENT
    atributo , el valor predeterminado es el siguiente valor en la secuencia.
  • Para los tipos de fecha y hora que no sean TIMESTAMP, el valor predeterminado es el "cero" apropiado para el tipo. Para la primera columna TIMESTAMP en una tabla, el valor predeterminado es la fecha y la hora actuales. Consulte la Sección 10.3, "Tipos de fecha y hora".
  • Para los tipos de cadena que no sean ENUM, el valor predeterminado es la cadena vacía. Para ENUM, el valor predeterminado es el primer valor de enumeración.
0

NO HAY valor predeterminado a menos que especifique uno (es decir, a menos que defina una "restricción predeterminada" para la columna en cuestión).

He aquí un ejemplo para añadir un defecto en una columna existente:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

He aquí un ejemplo de crear la tabla con un defecto:

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

Es una buena práctica para declarar todas las columnas "no es nulo ", y proporcionar restricciones predeterminadas según corresponda.

En el ejemplo "libros" anterior, si "inserta" sin especificar PubID, el PubID será cero.

En el mismo ejemplo, si "inserta" sin especificar ID o Nombre ... obtendrá un error.

Si quiere que MySQL auto-asignar un ID, utilice esta sintaxis en su lugar:

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 
-1

Si quiere desactivar nulo: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

La consulta anterior no permitirá nula y asignar una cadena vacía cuando el valor no se proporciona.
En phpmysqladmin, blank = empty.
A través de PHP mysqli function o mysql function, null value is returned as null todavía.

Una vez que tenga solicitar la consulta, puede filtrar fácilmente que mediante el uso de

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

Sin embargo, es mejor para hacer esto antes de realizar el altar: -

update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

Esto no es aconsejable. 'NULL' significa falta de valor (un desconocido) y ** no ** es lo mismo que un valor vacío. –

Cuestiones relacionadas