Questions tagged «foreign-keys»

外键是关系(和SQL)数据库的数据完整性功能。外键是关系表中的一组属性,这些属性受引用完整性约束的约束。参照完整性约束要求一个表A中的外键属性的值必须与某些指定表B(有时​​可能与A的表)中的对应值匹配。


6
强制删除mysql绕过外键约束
我试图从数据库中删除除一个以外的所有表,但最终出现以下错误: 无法删除或更新父行:外键约束失败 当然,我可以反复试验一下,看看这些关键约束是什么,最终删除所有表,但是我想知道是否有一种快速删除所有表的方法(因为我可以重新插入那些表不想删除)。 Google针对我的某个网站建议采用以下方法: mysql> SET foreign_key_checks = 0; mysql> drop table ... mysql> SET foreign_key_checks = 1; 简短的答案是,它实际上并没有解决问题,因为当我能够删除更多表时,我最终收到了同样的错误。我已经在Stack Overflow上看到了将所有外键链接到某个表的方法,但是除非我全部编写脚本,否则这将非常浪费时间(在没有其他选择的情况下这是可行的) 数据库是4.1,所以我不能使用 DROP DATABASE 有想法吗?

2
Ruby on Rails。如何在属于关系的Active Record中使用.build方法?
我无法在Rails中找到有关.build方法的任何文档(我目前正在使用2.0.2)。 通过实验,您似乎可以使用build方法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 这将正确保存带有外键的狗和标签。这似乎在belongs_to关系中不起作用。 d = Dog.new d.person.build # => nil object on nil.build 我也尝试过 d = Dog.new d.person = Person.new …


1
PostgreSQL外键语法
我有2个表格,您将在下面的posgresql代码中看到。第一个表格的student有两列,一列为student_name,另一列为student_id,这是主键。在我称为测试的第二张表中,该表有4列,一列用于subject_id,一列用于subject_name,然后一列用于在该学科中具有最高分数的学生,该分数最高。我正在尝试使highestStudent_id引用我的students表中的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); 语法highestStudent_id SERIAL REFERENCES students正确吗?因为我看过另一个像highestStudent_id REFERENCES students(student_id)) 请问在postgresql中创建外键的正确方法是什么?

24
数据库设计中真的需要外键吗?
据我所知,外键(FK)用于帮助程序员以正确的方式操作数据。假设程序员实际上已经在以正确的方式执行此操作,那么我们真的需要外键的概念吗? 外键还有其他用途吗?我在这里想念什么吗?

2
Django:使用整数设置外键?
有没有一种方法可以使用模型的整数ID设置外键关系?这将出于优化目的。 例如,假设我有一个Employee模型: class Employee(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) type = models.ForeignKey('EmployeeType') 和 EmployeeType(models.Model): type = models.CharField(max_length=100) 我想拥有无限的员工类型的灵活性,但是在部署的应用程序中可能只有一个类型,所以我想知道是否有一种方法可以对ID进行硬编码并以此方式设置关系。这样,我可以避免通过数据库调用先获取EmployeeType对象。

13
错误代码:1005。无法创建表“…”(错误号:150)
我在Internet上搜索了此问题的解决方案,并检查了Stack Overflow问题,但是没有一种解决方案适合我的情况。 我想创建一个从表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 ; 该脚本返回: Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150) 我尝试将索引添加到被引用的表中: CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU); 我在两个表(字符集和排序规则)上都检查了METAL_KODU,但找不到该问题的解决方案。我该如何解决这个问题? 这是metal_kod表: METAL_KODU varchar(4) NO PRI DURUM bit(1) NO METAL_ISMI varchar(30) …


8
将外键用作主键可以吗?
我有两个表: 用户(用户名,密码) 个人资料(个人资料ID,性别,出生日期等) 当前,我正在使用这种方法:每个Profile记录都有一个名为“ userId”的字段作为外键,该字段链接到User表。用户注册后,将自动创建其个人资料记录。 我很困惑与我的朋友建议:有“用户id”字段作为外国和主键和删除“简档”字段。哪种方法更好?

20
MySQL创建带有外键给errno的表:150
我正在尝试使用两个外键在MySQL中创建一个表,这些外键引用了其他2个表中的主键,但出现了errno: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`, …

8
如何在MySQL中创建关系
在课堂上,我们都是“学习”数据库,每个人都在使用Access。厌倦了这一点,我试图做该类其余部分的工作,但是要使用MySQL的原始SQL命令而不是使用Access。 我已经设法创建数据库和表,但是现在如何在两个表之间建立关系? 如果我有两个这样的表: CREATE TABLE accounts( account_id INT NOT NULL AUTO_INCREMENT, customer_id INT( 4 ) NOT NULL , account_type ENUM( 'savings', 'credit' ) NOT NULL, balance FLOAT( 9 ) NOT NULL, PRIMARY KEY ( account_id ) ) 和 CREATE TABLE customers( customer_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, …



5
SqlAlchemy-按关系属性过滤
我在SQLAlchemy上没有太多经验,并且有一个我无法解决的问题。我尝试搜索,并且尝试了很多代码。这是我的课程(简化为最重要的代码): class Patient(Base): __tablename__ = 'patients' id = Column(Integer, primary_key=True, nullable=False) mother_id = Column(Integer, ForeignKey('patients.id'), index=True) mother = relationship('Patient', primaryjoin='Patient.id==Patient.mother_id', remote_side='Patient.id', uselist=False) phenoscore = Column(Float) 我想查询所有母亲的phenoscore为(例如)的患者 == 10 如前所述,我尝试了很多代码,但我不明白。在我看来,合乎逻辑的解决方案是 patients = Patient.query.filter(Patient.mother.phenoscore == 10) 因为,您可以.mother.phenoscore在输出时访问每个元素,但是此代码不执行此操作。 是否有(直接)可能性通过关系的属性进行过滤(而无需编写SQL语句或额外的连接语句),所以我需要多次进行这种过滤。 即使没有简单的解决方案,我也很高兴获得所有答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.