2009-05-29 7 views
0

既存のdbテーブルを、新しい列を追加する新しいdbテーブルに変換する必要があります。 次のSQLコードで、この列のデフォルト値を-1に設定しました。データベーステーブルをアップグレードして新しい列を追加する

// Insert new column for holding appWidgetIds 
db.execSQL("ALTER TABLE favorites " + 
    "ADD COLUMN appWidgetId INTEGER NOT NULL DEFAULT -1;"); 

しかし、列のデフォルト値を1行ずつ増やして設定するにはどうすればよいですか?

+2

どのSQL? Oracle、MySQL、SQL Server、...? – n8wrl

答えて

1

これは、使用しているDBMSによって異なります。 MySQLの場合は、使用することができます:

ALTER TABLE x ADD COLUMN y INTEGER NOT NULL DEFAULT -1 AUTO_INCREMENT 

はあまりにもあなたの変換後http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

+0

MySQL + AUTO_INCREMENTに慣れていません - どのレコードがどの値を取得するかをどのように制御しますか? – n8wrl

+0

行には挿入順にyの増分値が割り当てられます。 http://dev.mysql.com/doc/refman/5.0/en/alter-table.html – rodion

0

は、値が新しい行の自動インクリメントされますか?ない場合は、3つのステップを行うことができます:

  1. はNULL可能列を持つテーブルを変更
  2. UPDATEあなたが再び
  3. ALTERを持って、NOT NULLを設定するルール何でもして新しい列を。
3

これはDBMSによって異なります。 MySQLのAUTO_INCREMENTを使用しています。

ALTER TABLE favorites ADD COLUMN appWidgetId INTEGER 
    NOT NULL DEFAULT -1 AUTO_INCREMENT 

PostgreSQLのCREATE SEQUENCEを使用しています。

CREATE SEQUENCE favorites_seq; 
ALTER TABLE favorites ADD COLUMN appWidgetId INTEGER 
    NOT NULL DEFAULT -1 nextval('favorites_seq') 

SQL ServerのIDENTITYを使用しています。

ALTER TABLE favorites ADD COLUMN appWidgetId INTEGER 
    IDENTITY(1,1) NOT NULL DEFAULT -1 

側の注意点として、私は知りませんなぜあなたのdを設定しているのですか? -1としてefault。彼らが常にポジティブになるなら、あなたはなぜあなたの整数を署名するのですか?効率を上げるためにはデフォルト値0にする必要があります。

関連する問題