db:migrate
生活随笔
收集整理的這篇文章主要介紹了
db:migrate
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先,確保你已經(jīng)配置好了database.yml,假設我們要創(chuàng)建一個名為person的model,現(xiàn)在我們可以通過db:migrate任務來避免直接使用SQL來操作數(shù)據(jù)庫:
rails g?model person name:string age:int
這條命令將在你的db/migrate目錄下創(chuàng)建001_create_people.rb文件,我們可以通過它來創(chuàng)建people(people是person的復數(shù))表:
$ rake db:migrate
== CreatePeople: migrating ===================
-- create_table(:people)
-> 0.1900s
== CreatePeople: migrated (0.1900s) ==========
現(xiàn)在,你會發(fā)現(xiàn)你的數(shù)據(jù)庫中已經(jīng)多了一個people表,它包含3個字段:id,name,age,如果你不需要那個自動創(chuàng)建的id字段,那么你可以修改001_create_people.rb,在create_table :people后面加上:id => false即可。
如果隨后你發(fā)現(xiàn)你需要再增加一個學位字段,也很簡單:
$?rails g?migration add_degree_to_people
== AddDegreeToPeople: migrating ============
-- add_column(:people, :degree, :string)
-> 0.3400s
== AddDegreeToPeople: migrated (0.4100s) ===
這將在db/migrate目錄下創(chuàng)建002_add_degree_to_people.rb文件,對它進行編輯:
class AddDegreeToPeople < ActiveRecord::Migration
def self.up
add_column :people, :degree, :string
end
def self.down
remove_column :people, :degree
end
end
然后再次執(zhí)行rake db:migrate,現(xiàn)在你會發(fā)現(xiàn)people表已經(jīng)多了一個degree字段。
事實上除了add_column,我們還可以對數(shù)據(jù)庫進行更多的操作:
create_table(name, options),創(chuàng)建表
drop_table(name),刪除表
rename_table(old_name, new_name),重命名表
add_column(table_name, column_name, type, options),添加列
rename_column(table_name, column_name, new_column_name),重命名列
change_column(table_name, column_name, type, options),改變列屬性
remove_column(table_name, column_name),刪除列
add_index(table_name, column_name, index_type),創(chuàng)建索引
remove_index(table_name, column_name),刪除索引
唯一需要注意的就是:必須在down方法中撤銷up方法對數(shù)據(jù)庫所作的一切更改,以保證我們所有的遷移都是可逆的。
比如,假設我們現(xiàn)在想從people中去除degree字段,那我們只需要執(zhí)行下面這條語句就可以了:
$ rake db:migrate version=1
如果我們連people表也不需要了,那就執(zhí)行:
$ rake db:migrate version=0
另外,除了db:migrate,還有兩個比較有用的操作數(shù)據(jù)庫的rake任務:
rake db:schema:dump,這將在db目錄下創(chuàng)建一個schema文件,你可以通過復制它的內(nèi)容來為數(shù)據(jù)庫中現(xiàn)有的表創(chuàng)建migration文件(如果你的應用不是一開始就使用db:migrate的話)
rake db:structure:dump,這將在db目錄下創(chuàng)建一個structure文件,它包含創(chuàng)建當前數(shù)據(jù)庫結構所需的SQL語句。
rails g?model person name:string age:int
這條命令將在你的db/migrate目錄下創(chuàng)建001_create_people.rb文件,我們可以通過它來創(chuàng)建people(people是person的復數(shù))表:
$ rake db:migrate
== CreatePeople: migrating ===================
-- create_table(:people)
-> 0.1900s
== CreatePeople: migrated (0.1900s) ==========
現(xiàn)在,你會發(fā)現(xiàn)你的數(shù)據(jù)庫中已經(jīng)多了一個people表,它包含3個字段:id,name,age,如果你不需要那個自動創(chuàng)建的id字段,那么你可以修改001_create_people.rb,在create_table :people后面加上:id => false即可。
如果隨后你發(fā)現(xiàn)你需要再增加一個學位字段,也很簡單:
$?rails g?migration add_degree_to_people
== AddDegreeToPeople: migrating ============
-- add_column(:people, :degree, :string)
-> 0.3400s
== AddDegreeToPeople: migrated (0.4100s) ===
這將在db/migrate目錄下創(chuàng)建002_add_degree_to_people.rb文件,對它進行編輯:
class AddDegreeToPeople < ActiveRecord::Migration
def self.up
add_column :people, :degree, :string
end
def self.down
remove_column :people, :degree
end
end
然后再次執(zhí)行rake db:migrate,現(xiàn)在你會發(fā)現(xiàn)people表已經(jīng)多了一個degree字段。
事實上除了add_column,我們還可以對數(shù)據(jù)庫進行更多的操作:
create_table(name, options),創(chuàng)建表
drop_table(name),刪除表
rename_table(old_name, new_name),重命名表
add_column(table_name, column_name, type, options),添加列
rename_column(table_name, column_name, new_column_name),重命名列
change_column(table_name, column_name, type, options),改變列屬性
remove_column(table_name, column_name),刪除列
add_index(table_name, column_name, index_type),創(chuàng)建索引
remove_index(table_name, column_name),刪除索引
唯一需要注意的就是:必須在down方法中撤銷up方法對數(shù)據(jù)庫所作的一切更改,以保證我們所有的遷移都是可逆的。
比如,假設我們現(xiàn)在想從people中去除degree字段,那我們只需要執(zhí)行下面這條語句就可以了:
$ rake db:migrate version=1
如果我們連people表也不需要了,那就執(zhí)行:
$ rake db:migrate version=0
另外,除了db:migrate,還有兩個比較有用的操作數(shù)據(jù)庫的rake任務:
rake db:schema:dump,這將在db目錄下創(chuàng)建一個schema文件,你可以通過復制它的內(nèi)容來為數(shù)據(jù)庫中現(xiàn)有的表創(chuàng)建migration文件(如果你的應用不是一開始就使用db:migrate的話)
rake db:structure:dump,這將在db目錄下創(chuàng)建一個structure文件,它包含創(chuàng)建當前數(shù)據(jù)庫結構所需的SQL語句。
?
轉(zhuǎn)載于:https://www.cnblogs.com/viaivi/archive/2010/06/22/1762894.html
總結
以上是生活随笔為你收集整理的db:migrate的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐一个短小精干的JavaScript对
- 下一篇: 转acm入门