Questions tagged «foreign-keys»

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


12
如何截断外键约束表?
为什么没有一个TRUNCATE上mygroup工作?即使ON DELETE CASCADE SET我知道了: 错误1701(42000):无法截断在外键约束中引用的表(mytest。instance,CONSTRAINT instance_ibfk_1FOREIGN KEY(GroupID)参考mytest。mygroup(ID)) drop database mytest; create database mytest; use mytest; CREATE TABLE mygroup ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB; CREATE TABLE instance ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, GroupID INT NOT NULL, DateTime DATETIME DEFAULT NULL, FOREIGN KEY (GroupID) …


28
因为FOREIGN KEY约束正在引用表,所以无法截断它?
使用MSSQL2005,如果我首先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表? 我知道我可以 使用DELETE无where子句,然后RESEED使用标识(或) 删除FK,截断表,然后重新创建FK。 我以为只要我在父表之前将子表截断,就可以不做上述任何一个选择,但是我会收到此错误: 无法截断表'TableName',因为它已被FOREIGN KEY约束引用。

6
何时使用“ ON UPDATE CASCADE”
我经常使用“ ON DELETE CASCADE”,但是我从不使用“ ON UPDATE CASCADE”,因为我不确定在什么情况下它会有用。 为了讨论起见,让我们看一些代码。 CREATE TABLE parent ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ); CREATE TABLE child ( id INT NOT NULL AUTO_INCREMENT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ); 对于“ ON DELETE CASCADE”,如果id删除带有的父级,则带有的子级中的记录parent_id = parent.id将被自动删除。这应该没问题。 …



30
MySQL错误1215:无法添加外键约束
我正在尝试将新架构向前工程到我的数据库服务器上,但是我不知道为什么会收到此错误。我试图在这里搜索答案,但是我发现的所有内容都说是将db引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。如果我没记错的话,我都做过这两件事。你们还有其他帮助吗? Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint -- ----------------------------------------------------- -- Table `Alternative_Pathways`.`Clients_has_Staff` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` ( `Clients_Case_Number` INT NOT NULL , `Staff_Emp_ID` INT NOT NULL , PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) , INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) , INDEX `fk_Clients_has_Staff_Clients_idx` …


13
将外键添加到现有表
我想将外键添加到名为“ katalog”的表中。 ALTER TABLE katalog ADD CONSTRAINT `fk_katalog_sprache` FOREIGN KEY (`Sprache`) REFERENCES `Sprache` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL; 当我尝试执行此操作时,出现以下错误消息: Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) INNODB状态错误: 120405 14:02:57表mytable的外键约束错误。#sql-7fb1_7d3a: FOREIGN KEY (`Sprache`) REFERENCES `Sprache` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL: Cannot …

11
如何选择另一个表中没有匹配条目的行?
我正在对数据库应用程序进行一些维护工作,但我发现,即使一个表中的值以外键的形式使用,但表上没有外键约束。 我正在尝试在这些列上添加FK约束,但是我发现,由于先前的错误已被天真纠正,因此表中已经存在大量不良数据,因此我需要查找那些行匹配另一个表,然后将其删除。 我在网络上找到了一些此类查询的示例,但它们似乎都提供了示例而不是说明,而且我不理解它们为什么起作用。 有人可以向我解释如何构造一个查询,该查询返回另一个表中没有匹配项的所有行,以及它在做什么,以便我可以自己进行这些查询,而不是为混乱中的每个表运行SO 没有FK限制?
323 sql  foreign-keys 

22
MySQL无法添加外键约束
因此,我作为项目需求试图将外键约束添加到数据库中,并且它第一次或在两个不同的表上运行,但是在尝试添加外键约束时,我在两个表上遇到了错误。我收到的错误消息是: 错误1215(HY000):无法添加外键约束 这是我用来创建表的SQL,两个有问题的表是Patient和Appointment。 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=1; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `doctorsoffice` DEFAULT CHARACTER SET utf8 ; USE `doctorsoffice` ; -- ----------------------------------------------------- -- Table `doctorsoffice`.`doctor` -- ----------------------------------------------------- DROP TABLE IF EXISTS `doctorsoffice`.`doctor` ; CREATE TABLE IF NOT EXISTS `doctorsoffice`.`doctor` ( `DoctorID` INT(11) NOT NULL …
314 mysql  sql  foreign-keys 

16
引入FOREIGN KEY约束可能会导致循环或多个级联路径-为什么?
我已经为此努力了一段时间,无法完全了解发生了什么。我有一个包含Sides(通常为2)的Card实体-Cards和Sides都有一个Stage。我正在使用EF Codefirst迁移,并且迁移因以下错误而失败: 在表“ Sides”上引入FOREIGN KEY约束“ FK_dbo.Sides_dbo.Cards_CardId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 这是我的银行卡实体: public class Card { public Card() { Sides = new Collection<Side>(); Stage = Stage.ONE; } [Key] [Required] public virtual int CardId { get; set; } [Required] public virtual Stage Stage { get; set; } [Required] [ForeignKey("CardId")] …

7
如何查找所有具有引用特定table.column的外键并具有这些外键值的表?
我有一个表,其主键在其他几个表中作为外键被引用。例如: CREATE TABLE `X` ( `X_id` int NOT NULL auto_increment, `name` varchar(255) NOT NULL, PRIMARY KEY (`X_id`) ) CREATE TABLE `Y` ( `Y_id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `X_id` int DEFAULT NULL, PRIMARY KEY (`Y_id`), CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`) ) CREATE TABLE `Z` …

30
外键怎么了?
我记得在播客014中听到乔尔·斯波尔斯基(Joel Spolsky)提到他几乎从未使用过外键(如果我没记错的话)。但是,对我来说,它们对于避免整个数据库中的重复和后续数据完整性问题至关重要。 人们为什么会有一些扎实的理由(避免按照堆栈溢出原则进行讨论)? 编辑: “我还没有创建外键的理由,所以这可能是我真正设置外键的第一个理由。”

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.