向现有表中添加一列,并唯一编号
我想添加一列到现有的遗留数据库,并写一个过程,我可以为每个logging分配一个不同的值。 就像添加一列并自动生成数据一样。
就像,如果我添加一个名为“ID”(数字)的新列,我想然后初始化每个logging的唯一值。 所以,我的ID列将有从1到1000的logging。我该怎么做?
这将取决于数据库,但对于SQL Server来说,这可以通过以下方式实现:
alter table Example add NewColumn int identity(1,1)
这将有助于您发布您正在使用的SQL数据库。 对于MySQL,您可能需要auto_increment:
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
不知道这是否适用于追溯价值。 如果不是的话,你应该只能用存储过程或简单的程序迭代你的值(只要没有其他人正在写入数据库)并设置使用LAST_INSERT_ID()
函数来生成id值。
对于oracle,你可以做下面的事情
alter table mytable add (myfield integer); update mytable set myfield = rownum;
只要使用ALTER TABLE应该可以工作。 添加与正确的types和IDENTITY标志的列,它应该做的伎俩
看看这个MSDN文章http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx关于ALTER TABLE语法
和Postgres相当(第二行是必须的,只有当你想要“ID”是一个关键):
ALTER TABLE tableName ADD id SERIAL; ALTER TABLE tableName ADD PRIMARY KEY (id);
取决于数据库,因为每个数据库都有不同的方法来添加序列号。 我会改变表添加列,然后编写一个数据库脚本在groovy / python /等读取数据和更新序列的ID。 一旦数据已经设置,我会添加一个序列到开头的数字后面的表。 一旦数据已经设置,正确设置主键。
如果您不希望新列的types为IDENTITY
(自动增量),或者您希望具体说明行的编号顺序,则可以添加一个types为INT NULL
的列,然后将其填充为这个。 在我的示例中,新列被称为MyNewColumn,表的现有主键列被称为MyPrimaryKey。
UPDATE MyTable SET MyTable.MyNewColumn = AutoTable.AutoNum FROM ( SELECT MyPrimaryKey, ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum FROM MyTable ) AutoTable WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey
这适用于SQL Sever 2005及更高版本,即支持ROW_NUMBER()