2010-06-08 3 views
16

Un spectacle commande create table montre les éléments suivants:Comment supprimer "NOT NULL" d'une colonne dans MySQL?

'columnA' varchar(6) NOT NULL DEFAULT ''; 

Comment puis-je modifier cette colonne afin que la est retirée non nulle? je besoin d'être:

'columnA' varchar(6) DEFAULT NULL; 

Je pensais que ce qui suit fonctionnerait, mais il n'a pas d'effet:

ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL; 

Répondre

21

Essayez ceci:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
+0

N'a pas fait la différence. – Will

+1

@Will: Fonctionne pour moi sur 5.1.35 - quelle erreur obtenez-vous? –

+0

Aucune erreur. Requête ok, 0 lignes affectées. 0 enregistrements, 0 doublons, 0 avertissements. – Will

2

faire le changement (au niveau local) dans phpMyAdmin. Il montrera la requête utilisée pour le changement. Exécutez cette requête en production et vous avez terminé.

Vous pouvez utiliser cette stratégie dans n'importe quel outil graphique pour voir les requêtes qu'il effectue. J'utilise personnellement Sequel Pro (for Mac OS X) au lieu de phpMyAdmin.

+1

Cette question ne contenait aucun contexte lié à phpMyAdmin. – Knubo

+0

@Knubo True, mais ma "réponse" contient une stratégie pour générer des instructions ALTER TABLE en utilisant une interface graphique. –

4

Normalement, la réponse de Eric devrait fonctionner:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 

(Bien que la partie 'NULL NULL DEFAULT' est en option).

Mais comme vous, j'ai eu un cas qui vient de rentrer OK sans rien faire. Dans mon cas, il semble être dû au fait que ma clé faisait partie de la clé primaire. Donc, je devais faire ce qui suit:

ALTER TABLE tbl_name DROP PRIMARY KEY; 
ALTER TABLE tbl_name MODIFY columnA varchar(6); 
ALTER TABLE tbl_name ADD PRIMARY KEY (columnA); 

avec cette dernière requête spécifiant quelle que soit votre clé primaire.

En outre, dans le cas où quelqu'un pense est trop bavard, la requête combinée suivante ne fonctionne pas, même si elle doit être identique:

ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA); 

Je suppose que mysql réécrit cette dernière requête dans un ordre différent si que la clé primaire existe toujours lorsque la modification est effectuée, d'où la nécessité de la décomposer en trois instructions.

FYI, c'est sur mysql 5.1.47 mais je n'ai pas encore trouvé de documentation indiquant pourquoi cela se produit donc je ne sais pas quelles versions sont affectées.

Questions connexes