zoukankan      html  css  js  c++  java
  • 如何在升级数据表的同时保留原数据

    一、问题

    项目做到后期,或者项目版本升级时,有时不得不更新原来的数据库设计。比如有一张表,可能需要增加字段、修改字段等。在某些情况下,Alter TABLE命令不能完成这个任务,比如更换主键。这时只能用全新的设计替换掉原来的设计。但是,如果让新设计的表格中,包含原来的数据呢?

    二、解决方案

    其实很简单,分4步:

    1. 创建新表
    2. 将原表数据插入到新表中
    3. 删除原表
    4. 将新表重命名为原表名
    三、实例

    知名开源项目BlogEngine.NET就是这样做的!比如以下是它从2.0版本升级到2.5版本时,所使用的SQLite数据库升级脚本的一部分,对be_Posts表做了升级。

     1 --
     2 -- Update be_Posts
     3 --
     4 Create TABLE be_PostsNew (
     5 [PostRowID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
     6 [BlogID] VARCHAR(36) NOT NULL,
     7 [PostID] VARCHAR(36) NOT NULL,
     8 [Title] VARCHAR(255) NOT NULL,
     9 [Description] TEXT NOT NULL,
    10 [PostContent] TEXT NOT NULL,
    11 [DateCreated] DATETIME NOT NULL,
    12 [DateModified] DATETIME NOT NULL,
    13 [Author] VARCHAR(50) NOT NULL,
    14 [IsPublished] BOOLEAN NOT NULL,
    15 [IsCommentEnabled] BOOLEAN NOT NULL,
    16 [Raters] INTEGER NOT NULL,
    17 [Rating] REAL NOT NULL,
    18 [Slug] VARCHAR(255) NOT NULL,
    19 [IsDeleted] BOOLEAN NOT NULL
    20 );
    21  
    22 Insert INTO be_PostsNew
    23     (BlogID, PostID, Title, Description, PostContent, DateCreated,
    24      DateModified, Author, IsPublished, IsCommentEnabled, Raters,
    25      Rating, Slug, IsDeleted)
    26 Select '27604f05-86ad-47ef-9e05-950bb762570c', p.PostID, p.Title, p.Description, p.PostContent, p.DateCreated,
    27      p.DateModified, p.Author, p.IsPublished, p.IsCommentEnabled, p.Raters,
    28      p.Rating, p.Slug, p.IsDeleted
    29 FROM be_Posts p;
    30  
    31 Drop TABLE be_Posts;
    32 Alter TABLE be_PostsNew RENAME TO be_Posts;
  • 相关阅读:
    PostgreSQL的数据类型
    博客园背景页面动态特效
    css ie7中overflow:hidden失效问题及解决方法
    win10的安装、win10启动盘制作
    windows win7 win10 多系统启动菜单 多系统引导设置
    微博加关注按钮
    {转}一位北京差生9年的北京生活
    最全的CSS浏览器兼容问题
    网站开发命名详细规范
    <meta http-equiv = "X-UA-Compatible" cotent = "IE=edge,chrome=1"/>
  • 原文地址:https://www.cnblogs.com/zengbin/p/4307006.html
Copyright © 2011-2022 走看看