[英]SqlServer create table with MySql like auto_increment primary key
[英]Two Foreign Keys raise “Can' create table” on MySQL AUTO_INCREMENT PRIMARY KEY
我已經創建了一個包含以下內容的遷移文件。它在SQLite上正常工作,但是當我切換到MySQL時,出現“無法創建表”錯誤(請參見下文)。
class CreateVisits < ActiveRecord::Migration[5.0]
def change
create_table :visits, :primary_key => :id do |t|
t.references :user, foreign_key: true
t.references :visitor, foreign_key: "User"
t.timestamps
end
add_index :visits, [:user_id, :visitor_id], unique: true
end
end
MySQL引發錯誤:
Mysql2::Error: Can't create table 'myapp_development.visits' (errno: 150):
CREATE TABLE `visits` (
`id` int AUTO_INCREMENT PRIMARY KEY,
`user_id` int,
`visitor_id` int,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
INDEX `index_visits_on_user_id` (`user_id`),
INDEX `index_visits_on_visitor_id` (`visitor_id`),
CONSTRAINT `fk_rails_09e5e7c20b`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`),
CONSTRAINT `fk_rails_b156c396f4`
FOREIGN KEY (`visitor_id`)
REFERENCES `visitors` (`id`)
)
ENGINE=InnoDB
歡迎想法!
當您嘗試引用不存在的表時,通常會引發150錯誤。
在您的情況下,您要將兩個外鍵都引用到users
表中的同一主鍵。
但是在這種情況下,您不能只使用foreign_key: true
。 但是您可以通過再添加兩行來實現
def change
create_table :visits, :primary_key => :id do |t|
t.references :user, references: :visits
t.references :visitor, references: :visits
t.timestamps
end
add_foreign_key :visits, :users, column: :user_id
add_foreign_key :visits, :users, column: :visitor_id
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.