Suite

Impossible d'ajouter la colonne POINT NOT NULL à la table MySQL


J'ai récemment mis à niveau vers MySQL 5.7.9 et j'utilise MyISAM pour mon moteur de table.

Ajout d'une nouvelle colonne POINT comme ceci :

MODIFIER TABLE  AJOUTER UN POINT de centroïde NON NULL ;

donne cette erreur :

ERREUR 1138 (22004) : utilisation non valide de la valeur NULL

Je peux créer la colonne sansNON NULLmais alors je suis incapable de créer un index spatial sur la colonne. Cela a fonctionné pour moi dans MySQL 5.6 et je ne vois rien de pertinent dans la documentation.


le problème était le suivant : vous ne pouvez pas créer une colonne non nulle sur une table avec des lignes existantes sans fournir une valeur par défaut (je n'ai pas pu le faire).

la bonne séquence :

  1. modifier table ajouter le point centroïde de la colonne
    (ajouter la colonne, pas de contrainte)
  2. mettre à jour définir le centroïde = ST_Centroid (forme)
    (c'est-à-dire remplir la colonne avec des valeurs)
  3. modifier table modifier le centre de gravité non nul
    (ajouter la contrainte)

J'espérais utiliser des colonnes générées pour contourner ce problème :

modifier la table apb ajouter la colonne geom POINT AS (POINT(lat,lon)) STOCKÉ NON NULL ;

mais obtenez la même erreur. Ce Est-ce que travail pour les colonnes arithmétiques simples :

modifier la table apb ajouter le total de la colonne int comme (lat+lon) STOCKÉ NON NULL ;

Cependant, vous pouvez utiliser l'ancienne syntaxe au moment de la création de la table, puis le chargement en bloc. La règle de génération signifie que vous avez toujours évité trois étapes d'ajout/mise à jour/modification douloureusement lentes (non nulles).