En muchos aspectos de SQL, hay tres formas en que puede establecer implícitamente una columna en NULL en cada inserción de fila. Estos soncolumnas MySQL con nulo predeterminado - opción estilística, ¿o no?
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
es decir, el primero establece el indicador NULL (en contraposición a NOT NULL), segundo uno sale de la bandera NULL en el valor predeterminado, y la tercera establece el indicador NULL y define el valor implícito como NULO.
He oído hablar 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 exista 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 insert si no hay un valor explícito, incluso si se activa el modo estricto. Entonces eso deja todas estas declaraciones de columnas idénticas.
En mi secuencia de comandos MySQL, para cada columna NOT NULL, especifico un valor PREDETERMINADO para las columnas que no espero establecer en algunas inserciones en mi aplicación, para evitar cualquier problema si tuviera que activar el modo estricto. Por lo tanto, creo que sería más simétrico si tuviera que elegir la tercera variación, a pesar de que es 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 mayor frecuencia en los guiones de los demás?
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 convierte literales enteros como cadenas (comillas simples) en cláusulas predeterminadas de 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 posibles errores que desconozco. Puedo elegir migrar de MySQL a PostgreSQL en el futuro, y también podría utilizar algunos consejos de esos expertos, p. si PostgreSQL distingue estos casos como lo hace MS-SQL. Corrígeme si estoy equivocado si hice alguna suposición incorrecta.
No estoy seguro de estar enterado, pero en MySQL puede establecer un valor predeterminado (que no es nulo) para una columna que admite valores NULL. Si no especifica un valor para esa columna al insertar, la columna tiene su valor predeterminado. También puede especificar explícitamente que se debe insertar nulo, en cuyo caso la columna es nula. Por ejemplo, puede especificar una columna como 'SMALLINT DEFAULT 3'. Luego, si inserta un valor entero no nulo explícitamente, almacena ese valor; si inserta nulo explícitamente, almacena nulo; y si no especifica un valor al insertar, almacena 3, el valor predeterminado. – Hammerite
¡sí! Solo me preocupo por las columnas que tienen un valor predeterminado nulo. –
Quizás esta pregunta sea más adecuada para [programmers.se]? – eggyal