登录 主页

Rails 数据库迁移

2023-09-19 09:40AM

注意:migration 一旦建立好,就不要修改!不要删除!

如果要修改数据库,就要建立新的 migration

1. migration:

1). 在 Rails 中,所以的 migration,都是用命令 rails generate migration 创建出来的,并且位于 db/migrate 目录下

2). 在使用 migration 之前要先配置好数据库

配置 Mysql 数据库

2. 使用 config/database.yml 来连接 mysql:

default: &default

   # 表示数据库的驱动. eg: mysql2, sqlite……

   adapter: mysql2

   # 连接数据库的用户名
   username: name

   # 表示密码
   password: password

   # 数据的 ip 地址,如果是本机数据库,就是 localhost
   host: localhost
   encoding: utf8mb4
   collation: utf8mb4_unicode_ci

# 表示,这是开发模式下的数据库配置
development:
  <<: *default

  #  数据库的名字
  database: db_name

# 表示,这是测试模式下的数据库配置
test:
   <<: *default

   #  数据库的名字
   database: db_name

# 表示,这是生产模式下的数据库配置
production:
   <<: *default
   #  数据库的名字

   database: db_name

3. 修改 Gemfile

# 根据 rails 版本增加相应的数据库(如果你的 rails 版本也是 4+ 的话,也可以使用这个版本)

gem 'mysql2', '0.3.17'

4. 对于 unbuntu, 要使用下面的命令安装好第三方包

$ sudo apt-get install libmysqlclient-dev

安装好各种 gem 

$ bundle install

创建好数据库

# 运行这个命令可以创建好一个数据库

$ bundle exec rake db:create

5. 可以使用 rails generate migration 命令创建表

# 例如,我想新建一个表 users

$ bundle exec rails g migration create_users

会生成下面的内容:

invoke active_record

create db/migrate/20230919125025_create_users.rb

可以看到上面的命令,创建了文件,可以在文件中增加内容

6. 运行

在文件中增加完内容之后,可以在命令行里面运行它

$ bundle exec rake db:migrate

就可以看到 命令行里面给出的提示,什么时候开始的(经过多少秒之后)运行结束

1). 在数据库后台就可以看到它生成了两个表, 一个叫 users. 里面有三个列 id,name,age (因为我在文件中增加了这几个列)

对应 Mysql,id列是必须的,第二列(name)和第三列(age)都是我创建的

2). 另外一个叫 schema_migrations,里面只有一个列,叫 version ,就是20230919125025(刚执行 migration 的名字)

这个表里面保存了它所以执行过的 migration 的名字(这个表专门记录当前数据库的 '迁移 ID '是多少,Rails 就是通过它和 db/migrate 中文件的差异来判断,当前的 Rails 的数据库是否是新的)

7. 回滚

回滚,就是通过一条命令 rake db:rollback 来执行对应的 migration 中的 down 方法

$ bundle exec rake db:rollback

然后刷新数据库后台就会发现表没了, tables 只剩下了一个 schema_migrations

再运行 bundle exec rake db:migration 数据库里面 users 这个表就会又出现了

返回>>

登录

请登录后再发表评论。

评论列表:

目前还没有人发表评论