2012-06-01 3 views
2

테이블 사용자를 만들 때 결과 테이블에는 정수로 정의 된 id라는 열이 있습니다. 다음과 같이 RAILS : DB MIGRATION : id 열을 auto_increment로 재설정

나는 그것이 BIGINT을 수정하는 서명을 시도 :

change_column :users, :id, :integer, :limit => 8, :unsigned => true 
BIGINT로 변경 없지만, 여전히 주요 지표로 확인되었다하지만 그것은 (더 이상 자동 증가 열였다 않았다

change_column :users, :id, :integer, :limit => 8, :unsigned => true, :null => false, :auto_increment => true 

레일 마이그레이션 말했다 :

그때 일을했는데, 그것은 (레일 마이그레이션이 잘 실행한다는 얘기하더라도) 부호로 설정되지 않았습니다 잘 실행되었지만 아무 것도 변경되지 않았습니다.

내가 좋아하는 뭔가를 시도 할 수 :

change_column :users, :id, :primary_index 

을하지만

나는 또한 MySQL의 코드로 문을 "실행"을 시도 할 수 시작된 곳은 바로 내 이름을 써 넣는 것,하지만 난 마이그레이션을 유지하려면 파일 "clean". 이 문제가있는 사람이 있습니까?

제쳐두고, 나는 또한 다른 컬럼에서 기본값을 NULL로 설정하려고 시도했다. 여기서 그것을 (그리고 Google) 연구했지만 성공하지 못했다.

편집 : 그것은 일반적인 마이그레이션을 통해 테이블 ​​작성의 일부로 만든 후 열 "ID"를 편집 할 수있는 방법이없는 것처럼

것 같다. 이를 수행하는 유일한 방법은 MySQL 구문을 사용하여 "실행"문을 사용하는 것입니다.

답변

0

레일스는 생성하려는 모든 테이블의 ID 필드를 관리하며,이 테이블은 마이 그 레이션 및 심지어 schema.rb 파일에서 숨겨집니다.

나는 한 걸음 물러서서 생각한다. 왜 너는 그걸로 어수선하기를 원 할까? 정말 필요한 것이 확실합니까?

편집 : This answer 정확히 찾고있는 것 같습니다.

"기본값을 NULL로 설정"에 관해서는 다시 한 번 말씀 드리겠습니다. 어쨌든 모든 열은 기본값으로 NULL입니다. 그러나 그런 경우가 아니라면 다음과 같이 마이그레이션 할 수 있습니다.

change_table :users do |t| 
    t.string :description, :default => nil 
end 

희망 사항이 귀하의 질문에 대한 답변입니다.

+0

기본 ID 필드 설정의 문제, 그것이 내가 2,147,483,647까지의 값으로 제한하고 있음을 의미하는 부호로 설정, 정수 값 점이다. 이것은 매우 큰 숫자처럼 보일지 모르지만 하루에 수천만 개의 레코드가있는 소셜 네트워크 데이터를 다루고 있습니다 (결국 보관되지만 ID 번호를 유지해야합니다). 그래서 서명하지 않은 bigint로 만들어야합니다. 18,446,744,073,709,551,615까지 제공합니다 (Twitter의 경우 트윗 ID를 bigint, unsigned로 제공). – EastsideDeveloper

+0

기본적으로 기본값은 NULL이지만,이 경우에는 우연히 변경했으며, 기본값을 null로 되돌릴 수있는 방법이 있으면 열을 삭제하고 다시 만드는 것만 큼 궁금합니다. . 이미 시도했습니다 : 기본 => false,하지만 NULL이 아닌 0을 생성합니다. – EastsideDeveloper

+0

기본 옵션에 대해 실수로 실수를 저 지르려고했습니다. 이제 해결되었습니다. 시도해 볼 수 있습니까? – Agis

1

생성하고이 마이그레이션을 실행 해보십시오 :

class ChangeColumnUserIdToAutoIncrement < ActiveRecord::Migration 

    def self.up 
    execute "ALTER TABLE users modify COLUMN id int(8) AUTO_INCREMENT" 
    end 

    def self.down 
    execute "ALTER TABLE users modify COLUMN id int(8)" 
    end 
end