我试图删除数据库中的所有表,除了一个,我最终得到以下错误:
无法删除或更新父行:外键约束失败
当然,我可以试错,看看那些关键约束是什么,并最终删除所有表但我想知道是否有一种快速方法强制删除所有表(因为我将能够重新插入那些我不想删除).
谷歌针对某些建议使用以下方法的网站:
mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;
Run Code Online (Sandbox Code Playgroud)
简短的回答是它没有真正做到这一点,因为我最终收到了同样的错误,而我能够删除更多的表.我已经在Stack Overflow上看到了将所有外键链接到某个表的方法,但这样做太费时了,除非我编写所有脚本(在没有其他选项的情况下这是可行的)
数据库是4.1所以我无法使用 DROP DATABASE
想法?
我一直无法在Rails中找到关于.build方法的任何文档(我目前正在使用2.0.2).
通过实验,似乎您可以使用构建方法has_many在保存记录之前将记录添加到关系中.
例如:
class Dog < ActiveRecord::Base
has_many :tags
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :dogs
end
# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true
Run Code Online (Sandbox Code Playgroud)
这将正确地保存带有外键的狗和标签.这似乎不适用于某种belongs_to关系.
d = Dog.new
d.person.build # => nil object on nil.build
Run Code Online (Sandbox Code Playgroud)
我也试过了
d = Dog.new
d.person = Person.new
d.save # => true
Run Code Online (Sandbox Code Playgroud)
Dog在这种情况下未设置外键,因为在保存时,新人没有id,因为它尚未保存.
我的问题是:
如何构建工作,以便Rails足够聪明,弄清楚如何以正确的顺序保存记录?
我怎样才能在belongs_to关系中做同样的事情?
我在哪里可以找到有关此方法的任何文档?
谢谢
我有下表:
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT);
Run Code Online (Sandbox Code Playgroud)
如何添加外键约束parent_id?假设启用了外键.
大多数示例假设您正在创建表 - 我想将约束添加到现有表中.
我将在下面的posgresql代码中看到2个表.第一个表学生有2列,一个用于student_name,另一个student_id是主键.在我的第二个名为tests的表中,它有4列,一个用于subject_id,一个用于subject_name,然后一个用于在一个主题中具有最高分数的学生,即最高学生.我试图让highStudent_id在我的学生表中引用student_id.这是我下面的代码,我不确定语法是否正确:
CREATE TABLE students ( student_id SERIAL PRIMARY KEY,
player_name TEXT);
CREATE TABLE tests ( subject_id SERIAL,
subject_name,
highestStudent_id SERIAL REFERENCES students);
Run Code Online (Sandbox Code Playgroud)
语法highestStudent_id SERIAL REFERENCES students是否正确?因为我见过另一个喜欢的人highestStudent_id REFERENCES students(student_id))
请问在postgresql中创建外键的正确方法是什么?
sql postgresql foreign-keys foreign-key-relationship relational-database
据我所知,外键(FK)用于帮助程序员以正确的方式操作数据.假设程序员实际上已经以正确的方式执行此操作,那么我们真的需要外键的概念吗?
外键还有其他用途吗?我在这里错过了什么吗?
我在互联网上搜索了这个问题的解决方案并检查了SO问题,但没有解决方案适用于我的情况.
我想从表sira_no到metal_kod创建一个外键.
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
Run Code Online (Sandbox Code Playgroud)
该脚本返回:
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
我尝试在索引表中添加索引:
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
Run Code Online (Sandbox Code Playgroud)
我在两个表(charset和collation)上检查了METAL_KODU.但无法找到解决这个问题的方法.有谁有想法吗?提前致谢.
编辑:这是metal_kod表:
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
Run Code Online (Sandbox Code Playgroud) 我试图在MySQL中创建一个带有两个外键的表,它引用了另外两个表中的主键,但是我得到一个错误:150错误,它不会创建表.
这是所有3个表的SQL:
CREATE TABLE role_groups (
`role_group_id` int(11) NOT NULL `AUTO_INCREMENT`,
`name` varchar(20),
`description` varchar(200),
PRIMARY KEY (`role_group_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `roles` (
`role_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50),
`description` varchar(200),
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB;
create table role_map (
`role_map_id` int not null `auto_increment`,
`role_id` int not null,
`role_group_id` int not null,
primary key(`role_map_id`),
foreign key(`role_id`) references roles(`role_id`),
foreign key(`role_group_id`) references role_groups(`role_group_id`)
) engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
有没有办法使用模型的整数id设置外键关系?这将用于优化目的.
例如,假设我有一个Employee模型:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
type = models.ForeignKey('EmployeeType')
Run Code Online (Sandbox Code Playgroud)
和
EmployeeType(models.Model):
type = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
我希望拥有无限制员工类型的灵活性,但在部署的应用程序中,可能只有一种类型,所以我想知道是否有办法对id进行硬编码并以这种方式设置关系.这样我就可以避免db调用来获取EmployeeType对象.
我已经设置了一个包含带有外键的列的表,设置为ON DELETE CASCADE(删除父项时删除子项)
SQL命令将其更改ON DELETE RESTRICT为什么?(如果有子女,则无法删除父母)
因为它们必须是唯一的,我应该在MySQL数据库中命名FK?
foreign-keys ×10
mysql ×5
sql ×2
activerecord ×1
database ×1
ddl ×1
django ×1
optimization ×1
oracle ×1
postgresql ×1
sql-drop ×1
sqlite ×1