升级数据库表以添加新列

时间:2009-05-29 16:58:57

标签: sql

我需要将现有的db表转换为添加新列的新db表。 我有以下sql代码,它将此列的默认值设置为-1。

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

但是如何设置列的默认值以逐行递增?

3 个答案:

答案 0 :(得分: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

作为旁注,我不知道你为什么要将默认设置为-1。如果他们总是积极的话,你为什么要签署整数?您应该将默认值设为0以提高效率。

答案 1 :(得分: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

答案 2 :(得分:0)

转换后的值是否会为新行自动递增?如果没有,你可以做3个步骤:

  1. 使用NULLable列
  2. 更改表格
  3. 使用您拥有的任何规则更新新列
  4. ALTER再次设置NOT NULL。