gpt4 book ai didi

mysql - 两个外键在 MySQL AUTO_INCRMENT PRIMARY KEY 上引发 "Can' create table"

转载 作者:行者123 更新时间:2023-11-29 11:06:40 24 4
gpt4 key购买 nike

我创建了一个包含以下内容的迁移文件..它在 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

关于mysql - 两个外键在 MySQL AUTO_INCRMENT PRIMARY KEY 上引发 "Can' create table",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41289406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com