una - Columnas de MySQL con DEFAULT NULL: opción estilística, ¿o no?
modificar el valor de una columna en mysql (2)
En muchos tipos de SQL, hay tres formas en que puede establecer una columna implícitamente en NULL en cada inserción de fila. Estos son:
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
Es decir, el primero establece el indicador NULL (en lugar de NO NULL), el segundo deja el indicador NULL en el valor predeterminado, y el tercero establece el indicador NULL y establece el valor implícito como NULL.
He escuchado acerca de cómo en Microsoft SQL, la segunda variación no es exactamente la misma, ya que también puede personalizar el valor predeterminado del indicador NULL para tablas o esquemas.
Pero para MySQL, no creo que haya tal característica. Además, en MySQL, las columnas con el indicador NULL, a diferencia de las columnas NOT NULL, siempre se establecen implícitamente en NULL en la inserción si no hay un valor explícito, incluso si el modo estricto está activado. Así que eso deja idénticas todas estas declaraciones de columna.
En mi script MySQL, para cada columna NOT NULL, especifico un valor DEFAULT para las columnas que no espero establecer en algunas inserciones en mi aplicación, para evitar problemas si tuviera que habilitar el modo estricto. Por lo tanto, creo que sería más simétrico si eligiera la tercera variación, aunque sea la más detallada y explícita. ¿Son comunes las declaraciones como la tercera variación, o la primera o la segunda variación se producen con más frecuencia en los guiones de otros?
Estaba considerando inclinarme hacia el segundo enfoque porque ese es el alias que usa el volcado de MySQL, pero no estoy seguro de que sea una buena idea ya que también vuelca los literales enteros como cadenas (comillas simples) en las cláusulas predeterminadas de las declaraciones de columna.
Esta pregunta puede parecer más una opinión que una que tiene una solución, pero también quiero estar al tanto de cualquier problema potencial que no conozca. Puedo elegir migrar de MySQL a PostgreSQL en el futuro, y también podría usar algunos consejos de esos expertos, por ejemplo, si PostgreSQL distingue estos casos como lo hace MS-SQL. Corríjame si estoy equivocado si hice alguna suposición incorrecta.
Cada base de datos que he encontrado trata a NULL de la forma en que los describe. Cuando una columna acepta valores NULOS, al no proporcionar un valor en INSERT, el valor predeterminado es NULL. Creo que esto es parte del comportamiento estándar de ANSI.
En cuanto a especificar "NULL" en sí. Esa es una cuestión de preferencia. El estándar dice que una columna permite NULL a menos que se especifique NOT NULL (en el nivel del lenguaje de definición de datos). Por lo tanto, el NULL en sí es innecesario, y usted tiene una cuarta opción equivalente:
columnname type
Los NULL están bastante integrados en el lenguaje SQL a través del estándar ANSI. Su tercera opción es la más explícita, pero también parece un poco inusual.
Si planea ser super consistente en todo su sistema, entonces tomaría el camino en el que se encuentra. Para cada columna en cada tabla tiene NULL o NOT NULL. Para todas las columnas que toman valores predeterminados, tenga la instrucción DEFAULT.
Sin embargo, no espere que otras personas con las que trabaja (ahora o en el futuro) sigan fácilmente este ejemplo. Muchos preferirían la cuarta opción en este caso simplemente porque requiere menos escritura y es cómo se comportan todos (o casi todos) los dialectos de SQL.
Como se documenta en Valores predeterminados de tipo de datos :
Si la columna puede tomar
NULL
como un valor, la columna se define con una cláusulaDEFAULT NULL
explícita.
(Creo que significaban implícito , no explícito ).
Además, como se documenta en la sintaxis de CREATE TABLE
:
Si no se especifica
NULL
niNOT NULL
, la columna se trata como si se hubiera especificadoNULL
.
Por lo tanto, en MySQL las siguientes definiciones de columna son todas idénticas:
columnname type
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
La elección de cuál usar es un equilibrio entre ser explícito y ser conciso. Dependiendo de las circunstancias, podría usar cualquiera de los anteriores.