Creating and Running Migration
在每一個migration file 的前面,有一個三位數的數字,和一個underscore,這個三位數的數字是migration在應用時的版本值。
我們可以餵了新增一個column而新增一個migration file,如此是為了version control。可是當file 多時,會否管理又是一個問題?
當執行rake db::migrate時,這個task首先會檢查db中的schema_info table,以取得目前的version。如果schema_info不存在,則會建立這個table,並設定version 這個column的值為0。
在schema_info這個table中,只有一個column,column name為version。也只有一個row,存放目前的migration version。
如果schema_info table以存在,rails會將值讀出來,然後檢查db/migrate 目錄中所有檔案,是否有檔案的名稱的首三位數字比schema_info table中的version數字大的,如果有,則依序執行他,並改變db。當完成後,便將最後一個數字存入schema_info table中。
強制migrate到某個版本:rake db:migrate VERSION=10
如果數字大於目前的版本,則會將db/migrate目錄中,首三碼的數字是介於目前的版本號碼到指定號碼間的檔案,由小到大執行up method,修改db。
如果數字小於目前的版本,則會將db/migrate目錄中,首三碼的數字是介於目前的版本號碼到指定號碼間的檔案,由大到小執行down method,修改db。
最後都會將schema_info version的數字改為最後執行的編號。
Anatomy of a Migration
Migration class是ActiveRecord::Migration的subclass,其中需包含兩個method up 與 down。
Migration 支援的column type: binary, bo0lean, date, datetime, decimal, float, integer, string, text, time, timestamp。
每一個column有一些選項可以坐設定:
:null => true/false 如果是false,則該column不可以是null。
:limit => size 設定這個column的值得size,例如string的字元數。
Default => value 設定預設值。
在decimal這個column type另有兩個選項可以設定:precision /scale
:precision => 5 定義這個數字有幾位數
:scale => 2 定義小數點後有幾位
ex. add_column
rders, :price, :decimal, :precision=>8, :scale=>2
其範圍是999999.99~-999999.99
add_column
rders, :placed_at, :datetime, :default=>Time.now
因為default value只會在migrate執行時計算一次,所以上述的statement的預設值都是一樣的時間,就是migrate的時間。
如果要解決這個問題,只需將此column name設為created_at,type設為timestamp。
Renaming Column
我們可以利用rename_column來修改column name。
ex. rename_column
rders, :e_mail, :customer_email
其中第一個參數是table name,第二個是舊名稱,第三個是新名稱
Changing Columns
利用change_column method,我們可以修改column type,以及改變某個column的選項。
ex. 將某個type為integer的column改為integer。
def self.up
change_column
rders,
rder_type, :string, :null=>false
end
如此一來,原本在這個column中的數字,就會被改為字串,ex. 123=> '123'
那self.down我們要怎麼寫呢?我們可以很直覺得寫
change_column
rders,
rder_type, :integer
可是這樣會有一個問題,就是如果我們在這個column中有不是數字的值,那該怎麼辦,如果這個column可以接受null,那也許不是問題,可是如果不行呢?
這個時候我們就要讓這個migration成為不能回復的動作,Rails提供了一個特別的exception。
def self.down
raise ActiveRecord::IrreversibleMigration
end
Managing Table
Class CreateOrderHistories < ActiveRecord::Migration
def self.up
create_table
rder_histories do |t|
t.column
rder_id, :integer, :null=>false
t.column :create_at, :timestamp
end
end
def self.down
drop_table
rder_histories
end
end
create_table method 會取得一個table name 與一個block,這個block會透過一個表格定義物件(Table definition object)來定義每一個column。
在create_table中,Migration會自動加入id這個column,並設定為primary key,所以我們無須另外定義。
在create_table中我們可以加入一些選項做設定:
force => true, migration在建立這個table前會先將同名的table刪除。
转自
http://tw.myblog.yahoo.com/weijenlu/article?mid=31&prev=33&next=30&l=a&fid=9
分享到:
相关推荐
MySQL Migration Toolkit是一款强大的数据库迁移工具,它为用户提供了将数据从其他数据库系统迁移到MySQL的便利。这款2.3版本的工具集成了多种功能,旨在简化数据库迁移过程,确保数据的完整性和一致性。 1. **简介...
MySQL Migration Toolkit是一款强大的工具,专为数据库管理员和开发人员设计,用于将各种其他数据库系统的数据迁移到MySQL。这款免安装版本使得用户无需正式安装即可直接使用,方便快捷。以下是关于MySQL Migration ...
MySQL Migration Toolkit 可以将任何数据源转换成mysql的数据,也可以将mysql的数据转换成其它类型的数据 MySQL Migration Toolkit 包括下列转换工具: Access-to-MySQL Access数据库转MySQL数据库 DBF-to-MySQL DBF...
### 使用 IBM DB2 Migration Toolkit 迁移数据 #### 背景介绍 随着技术的发展,企业经常需要在不同的数据库系统之间迁移数据。IBM DB2 Migration Toolkit (MTK) 是一款强大的工具,它可以帮助用户轻松地将数据从...
**ESF Database Migration Toolkit** 是一款专业的数据迁移工具,它具备强大的功能,支持在多种主流数据库之间进行数据迁移。这款工具能够帮助用户轻松地将数据从一个数据库系统迁移到另一个,比如MySQL、Oracle、...
ESF Database Migration Toolkit 是一个允许您在不同数据库格式之间进行数据转换的程序。 它可以直接连接到MySQL,SQL Server, PostgreSQL,Oracle,Access,Excel,Paradox,Lotus,dBase,Visual FoxPro,Text等...
《ESF Database Migration Toolkit Pro 8.2.07 数据库迁移神器详解》 在数字化时代,数据库迁移是一项至关重要的任务,确保业务连续性并优化系统性能。ESF Database Migration Toolkit Pro 8.2.07 正是这样一款专为...
**ESF Database Migration Toolkit - Professional** 是一款专为数据库转换设计的强大工具,它为企业级用户提供高效、稳定且灵活的数据迁移解决方案。这款软件支持多种数据库系统,包括但不限于MySQL、Oracle、SQL ...
ESF Database Migration Toolkit是一款數據庫遷移工具,支援如下數據庫和文件 系統的遷移:Oracle, MySQL, SQL Server, PostgreSQL, IBM DB2, Visual Foxpro, SQLite, FireBird, InterBase, Microsoft Access, ...
### Oracle SQL Developer Migration Workbench (MySQL to Oracle) #### 概述 随着企业信息化建设的不断深入,数据库迁移已经成为一种常见的需求。特别是在不同数据库系统之间的数据迁移过程中,如何保证数据的...
1、解压 migration-4.1.4-2023-11-23.zip 2、打开 migration 工具 3、点击帮助菜单,可查看使用说明文档,如下图所示 二、迁移步骤: 1、新建组,随便起名。 2、数据库连接,新建 源库 MySQL 连接。 3、新建 目标库 ...
dbMigration .NET 是个简单,易用,直观的多数据库迁移工具。通过 DBMigration .NET 可以在不同数据库之间轻松迁移模式和数据,不需要经过复杂的程序处理。当前支持的数据库:PostgreSQL, SQL Server, SQL Azure, ...
tomcat升级为10.x版本以后,由于JavaEE更名为Jakarta,原有的javax.*命名空间迁移为jakarta.x,原有项目如需迁移到...jar jakartaee-migration-0.2.0.jar <source> 命令,将新生成的war包放到webapps下即可正常使用
### Live_Migration虚拟化实战知识点解析 #### 一、Live Migration 概述 - **定义**: Live Migration(实时迁移)是指在不影响虚拟机运行的情况下,将其从一台物理服务器迁移到另一台物理服务器上的过程。 - **...
首先,根据文档标题和描述,我们可以明确这篇指南主要讲述了如何使用MySQL Workbench中的Migration Wizard工具来实现从Microsoft SQL Server到MySQL的数据库迁移。Migration Wizard是一个图形化的工具,它能够指导...
**IBM Migration Toolkit** 是一款由IBM提供的专业数据迁移工具,旨在帮助用户轻松地在不同的数据库系统之间进行数据源迁移。这款工具支持多种数据库平台,包括SQL Server、MySQL、Oracle以及DB2,使得在这些数据库...
MySQL数据库移植工具(MySQL.Migration.Toolkit.v2.3)是一款专为数据库迁移设计的强大软件,主要功能在于实现不同数据库系统间的数据迁移,包括从其他数据库系统迁移到MySQL以及从MySQL迁移到其他数据库系统。...
【IBM DB2 Migration Toolkit】是IBM提供的一款强大的数据库迁移工具,专为帮助用户从其他数据库系统,如Oracle、SQL Server等迁移到DB2数据库而设计。这个工具集旨在简化迁移过程,减少潜在风险,提高迁移效率,...
**ESF Database Migration Toolkit Pro 8.2.07** 是一款专业的数据库迁移工具,专为需要在不同数据库系统间进行数据迁移的用户设计。它提供了高效、安全且灵活的数据转换解决方案,使得从一个数据库环境迁移到另一个...
《全面解析WordPress迁移插件:All-in-One WP Migration File Extension》 在WordPress的世界里,数据迁移是一项常见的任务,无论是为了网站备份、迁移至新的主机,还是进行开发测试,都需要高效且可靠的工具。All-...