mysql - Rails迁移删除键并将数据添加到自动增量列id中

标签 mysql ruby-on-rails rails-migrations

我的 php 应用程序的表结构如下

CREATE TABLE IF NOT EXISTS `artist_has_fans` (
`artist_id` int(11) NOT NULL,
`fan_id` int(11) NOT NULL,
 PRIMARY KEY (`artist_id`,`fan_id`),
 KEY `fk_artist_has_artist_artist2` (`fan_id`),
 KEY `fk_artist_has_artist_artist1` (`artist_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我需要在rails中编写迁移,以便表具有带自动增量的主键id。 其次,由于表已经有一些数据,我需要为 id 列插入数据。 然后我需要从现有列中删除主键。

感谢任何有关编写迁移的帮助。

最佳答案

从上面看,它看起来就像一个连接表。您是否计划向其添加其他属性,或者您只是想让它与 Rails 一起使用?您可以只使用 Rails 内的 has_and_belongs_to_many 关系,并且不需要 ID 字段。

类似下面的内容应该可以工作,而无需修改您的表格。

class Artist < ActiveRecord::Base
   ...
   has_and_belongs_to_many :fans, :join_table => 'artist_has_fans'

end 

但是如果你想修改表以在mysql中添加主键

   def_up
      execute <<-SQL
       ALTER TABLE artist_has_fans ADD id INT PRIMARY KEY AUTO_INCREMENT;
      SQL
   end 

这应该创建 id 并为所有现有行添加值

关于mysql - Rails迁移删除键并将数据添加到自动增量列id中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236000/

相关文章:

mysql - 合并两个 MySQL 表

sql - Active Record 查询以匹配每个子集元素

ruby-on-rails - 在 Rails 中的现有数据库中填充一些数据的最佳实践

mysql - rake 数据库 :migrate wipes out my database

ruby-on-rails - Rails 3 迁移现在在 Rails 5 中失败

php - 优化多个 MySQL(子)查询

php - 匹配数据库表中的任意一组字段

php - 撇号和等号从句不起作用

ruby-on-rails - 如何撤消 Rails 中最近的迁移

ruby-on-rails - Rails Controller 可以请求相互 SSL 身份验证吗?