web-dev-qa-db-fra.com

Modification d'une colonne: nulle à non nulle

Je dois changer une colonne dans MYSQL en NULL en NOT NULL, mais j'obtiens l'erreur excutar la syntaxe. Je ne souhaite modifier que la dernière colonne, j'ai déjà effectué quelques recherches mais je n'ai pas trouvé la solution, ce qui peut être simple mais je suis nouveau dans la base de données et je ne l'avais pas réalisé jusqu'à présent. quelqu'un peut-il m'aider?

Exemple détenu: changer rapidement la colonne NULL en NOT NULL

ALTER TABLE glpi_ticketsatisfactions ALTER COLUMN comment BIGINT NOT NULL;

Ma table: My table

Erreur:

[42000] [1064] Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de 'BIGINT NOT NULL' à la ligne 1

CREATE TABLE:

CREATE TABLE glpi_ticketsatisfactions 
( id int(11) NOT NULL AUTO_INCREMENT, 
  tickets_id int(11) NOT NULL DEFAULT '0', 
  type int(11) NOT NULL DEFAULT '1', 
  ate_begin datetime DEFAULT NULL, 
  date_answered datetime DEFAULT NULL,
  satisfaction int(11) DEFAULT NULL, 
  comment text COLLATE utf8_unicode_ci, 
  PRIMARY KEY (id), 
  UNIQUE KEY tickets_id (tickets_id) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
6
Renato Lazaro

La syntaxe que vous avez utilisée provient d'un exemple SQL Server , pas de MySQL . Il serait bon de vérifier la documentation MySQL sur ALTER TABLE syntaxe.

Dans MySQL, le ALTER COLUMN le sous-paragraphe ne peut être utilisé que pour définir ou supprimer la valeur par défaut de la colonne (SET DEFAULT literal ou DROP DEFAULT).

Vous devez utiliser soit CHANGE COLUMN (notez que le nom de la colonne est doublé car vous pouvez l'utiliser pour changer son nom):

ALTER TABLE MyTable  
    CHANGE COLUMN comment comment BIGINT NOT NULL;

ou MODIFY COLUMN:

ALTER TABLE MyTable 
    MODIFY COLUMN comment BIGINT NOT NULL;

Maintenant, il y a 2 autres problèmes, à côté de la syntaxe:

  • Voir le CREATE TABLE, la conversion d'une colonne "commentaire" de TEXT en BIGINT n'a pas beaucoup de sens. Je suppose que vous voulez le conserver TEXT et ne le faire que NOT NULL.

  • Il peut y avoir des valeurs NULL déjà dans la table. Si tel est le cas, l'instruction échouera avec des erreurs. Donc, vous devez d'abord UPDATE ces valeurs à une valeur non nulle (par exemple la chaîne vide), puis modifier la colonne:

Nos déclarations deviennent donc:

UPDATE glpi_ticketsatisfactions 
SET comment = ''
WHERE Comment IS NULL ;

ALTER TABLE glpi_ticketsatisfactions 
    MODIFY COLUMN comment TEXT COLLATE utf8_unicode_ci NOT NULL ;
19
ypercubeᵀᴹ