2016-02-24 2 views
1

Je voudrais une migration de base de données qui est essentiellement l'instruction SQL suivante:Comment ajouter UNIQUE AUTO_INCREMENT première colonne id

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST; 

Y at-il une migration Sequel qui fait exactement cela? J'ai eu assez près avec ce qui suit, mais il ne semble pas être exactement ce que je veux:

Sequel.migration do 
    change do 
    alter_table :my_table do 
     add_column :id, Bignum, null: false, unique: true 
    end 
    end 
end 

Plus précisément, il semble manquer incrémentation automatique et ne sera pas la première colonne.

+1

Pourquoi est-ce important si la colonne id n'est pas la première? – Shadow

+0

Pas critique que c'est le 1er, mais si possible ce serait bien. L'auto-incrémentation est critique. Souhaiterait également remplir des lignes existantes. –

+0

Cela ne devrait-il pas être 'add_primary_key' au lieu de' add_column'? – infused

Répondre

1

Cela devrait fonctionner:

DB.add_column :myTable, :id, Bignum, null: false, unique: true, :auto_increment=>true 

Notez que cela ne vous donne pas FIRST. Si vous voulez FIRST, vous devez utiliser SQL brut:

DB.run "ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST" 

L'autre différence est votre SQL ne spécifie pas NOT NULL, mais votre code Sequel.