J'ai créé une table dans MySQL avec la colonne itemID
. Après avoir créé la table, je souhaite maintenant changer cette colonne en AUTOINCREMENT
. Comment cela peut-il être fait en utilisant les instructions ALTER?
Définition du tableau:
ALLITEMS (itemid int(10) unsigned, itemname varchar(50))
J'utilise le code suivant mais il jette erreur: syntaxe incorrecte.
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT;
CREATE TABLE ALLITEMS(
itemid INT(10)UNSIGNED,
itemname VARCHAR(50)
);
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
DESC ALLITEMS;
INSERT INTO ALLITEMS(itemname)
VALUES
('Apple'),
('Orange'),
('Banana');
SELECT
*
FROM
ALLITEMS;
J'ai été confondu avec les mots clés CHANGE
et MODIFY
auparavant:
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE ALLITEMS MODIFY itemid INT(5);
Pendant que nous y sommes, notons également que AUTO_INCREMENT
peut également commencer par un nombre prédéfini:
ALTER TABLE tbl AUTO_INCREMENT = 100;
La syntaxe:
ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT
Mais la table a besoin d'une clé définie (ex clé primaire sur itemId).
ALTER TABLE `ALLITEMS`
CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Syntaxe de base pour ajouter une AUTO_INCREMENT PRIMARY KEY à la table existante du PO:
_ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;
_
Ou pour une nouvelle table, voici l'exemple de syntaxe de the docs :
_CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
_
Pièges et choses à noter:
AUTO_INCREMENT
_ doit avoir un index. (D'habitude, vous voudrez que ce soit la clé primaire, mais MySQL ne l'exige pas.)AUTO_INCREMENT
_ colonnes UNSIGNED
. D'après les documents: Utilisez si possible l'attribut UNSIGNED pour permettre une plus grande plage.
CHANGE
ou MODIFY
pour créer une colonne _AUTO_INCREMENT
_ (ou bien à chaque fois vous utilisez une clause CHANGE
ou MODIFY
), vous devez veiller à inclure tous les modificateurs dans colonne, telle que _NOT NULL
_ ou UNSIGNED
, qui apparaît dans la définition de la table lorsque vous appelez _SHOW CREATE TABLE yourtable
_. Ces modificateurs seront perdus autrement.ALTER TABLE allitems
CHANGE itemid itemid INT(10) AUTO_INCREMENT;
ALTER TABLE tblcatalog
CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST;