标签: foreign-key-relationship

MySQL - ON 更新级联 +foreign_key_checks = 0

我正在开发一个工具来合并两个具有相同架构但不同数据的数据库。

其中一部分是将所有外键更改为ON UPDATE CASCADE,然后递增所有主键以避免冲突并保持外键指针正常工作。

我的问题是,有时会有一些 FK 损坏的孤立行,因此以下查询:

UPDATE table set pk = pk + 1000000
Run Code Online (Sandbox Code Playgroud)

像这样失败: ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails...(尽管我什至没有考虑触摸外键列!)

我想通过以下方式关闭它:

Set foreign_key_checks=0
Run Code Online (Sandbox Code Playgroud)

但随后相关的外键不会更新。我做了一个快速测试,设置foreign_key_checks = 0后级联不起作用。

有没有办法触发级联,或者在不设置的情况下执行 FK 损坏的行的更新foreign_key_checks=0UPDATE IGNORE没有解决这个问题:(

mysql database foreign-keys foreign-key-relationship sql-update

5
推荐指数
1
解决办法
1217
查看次数

Spring Data Repository for Entity,其中外键也是主键

我在使用 JPA2 (EclipseLink) 和 Spring Data 1.4.2 时遇到一些问题。就我而言,两个表具有一对一的关系:

表A:

  • 辅助 (PK)
  • ...

表B:

  • bId(PK、FK - 映射到表 A 中的 aId)
  • ...

所以我尝试做这个实体:

实体A:

@Entity
@Table(name = "TableA")
public class EntityA implements Serializable {
    @Id
    @GeneratedValue
    @Column(name = "aId")
    private Long id;
    // another fields and getter/setter/business methods
    ... 
}
Run Code Online (Sandbox Code Playgroud)

实体B:

@Entity
@Table(name = "TableB")
public class EntityB {
    @Id
    @OneToOne
    @JoinColumn(name = "bId", referencedColumnName = "aId")
    private EntityA id;
    // another fields and getter/setter/business methods
    ... 
}
Run Code Online (Sandbox Code Playgroud)

EntityA 的 Spring Data …

java spring jpa foreign-key-relationship spring-data-jpa

5
推荐指数
1
解决办法
8920
查看次数

MySQL - 删除时外键在非空字段中设置为空

这可能是一个微不足道的问题,但在外键约束方面我仍然有点笨拙,所以我想确定一下。

假设我有一个包含countries字段country_id(PK) 和 ( FK) 的表name,以及一个cities包含字段city_id(PK)namecountry_id(FK) 的表。

外键cities.country_id有约束ON DELETE SET NULLcountries据我了解,这意味着如果删除记录,则cities该删除记录的引用中的任何记录country_id都将其country_id字段设置为 NULL。

但是,如果cities.country_id具有属性怎么办NOT NULL?这会阻止外键约束正常工作吗?确实如此,但我只是想检查一下。

mysql sql foreign-key-relationship create-table notnull

5
推荐指数
1
解决办法
2万
查看次数

一个表中的两列是否可以具有指向另一表中同一列的外键?

我的数据库中有两个表:Person 和 Pet。

CREATE TABLE Person (
    id INT NOT NULL,
    PRIMARY KEY (id)
)

CREATE TABLE Pet (
    id INT NOT NULL,
    original_owner INT NOT NULL,
    current_owner INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (original_owner)
        REFERENCES Person(id),
    FOREIGN KEY (current_owner)
        REFERENCES Person(id)
)
Run Code Online (Sandbox Code Playgroud)

我试图参考每只宠物的前任主人和当前主人。我也尝试过

CREATE TABLE Pet (
    id INT NOT NULL,
    original_owner INT NOT NULL,
    current_owner INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (original_owner, current_owner)
        REFERENCES Person(id, id)
)
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE Pet (
    id INT …
Run Code Online (Sandbox Code Playgroud)

mysql sql foreign-keys foreign-key-relationship

5
推荐指数
1
解决办法
6110
查看次数

通过 Liquibase 使用外键插入新记录

我使用 Liquibase 插入将两行添加到数据库并通过外键链接它们,如下所示:

<changeSet id="1.0.1" author="x">      
    <insert tableName="TABLE1">
        <column name="NAME" value="a value"/>
    </insert>
</changeSet>

<changeSet id="1.0.2" author="x">      
    <insert tableName="TABLE2">
        <column name="FK" valueComputed="(SELECT ID FROM TABLE1 WHERE NAME = 'a value')"/>
    </insert>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

除了 TABLE2 中外键的值之外,两条记录均已正确插入。该值保持为空。所以看来“computeValue”属性没有正确执行,但我不明白为什么。我希望在 Liquibase 中找到一个解决方案,而不是在普通 SQL 中,因为 Liquibase 为我提供了轻松插入 clob 字段的可能性。

表1:ID - 5522839049923041049862979858500642751,名称 - 一个值

表2:ID - 4246034635279239656888789950125407204,FK -(空)

这是表结构:

<changeSet id="1.0.0" author="x">        
     <createTable tableName="TABLE1">
        <column name="ID" type="NUMBER (38)">
            <constraints primaryKey="true"/>
        </column>
        <column name="NAME" type="NUMBER (38)">
            <constraints nullable="false"/>
        </column>
    </createTable>
    <addUniqueConstraint columnNames="NAME" 
        constraintName="TABLE1_UK1" 
        tableName="TABLE1"/>

    <createTable tableName="TABLE2">
        <column …
Run Code Online (Sandbox Code Playgroud)

sql foreign-key-relationship liquibase sql-insert

5
推荐指数
1
解决办法
4422
查看次数

django:在多表继承中遵循向后到子类的关系

我欢迎任何有关我的问题的帮助。我试图在多表继承情况下将关系向后跟踪到子类。

即我想要一个特定州所有餐馆的查询集。

这是我的问题的一个简化示例(对 django 文档中的eg进行修改);

from django.db import models

class Place(models.Model):
    state = models.ForeignKey('State')
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

class State(models.Model):
    state = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

如果我尝试,state.restaurant_set.all()我会收到异常

“State”对象没有属性“Restaurant_set”

但是,如果我尝试 state.place_set.all(),我会收到该州的一组地点查询,但我真的只想要该州的餐馆。

任何人都可以提供一些关于如何正确制定我的查询集的建议,或者提供一些关于如何实现这一目标的其他想法?

任何帮助将不胜感激

django inheritance foreign-key-relationship

5
推荐指数
1
解决办法
529
查看次数

SQL查询:自引用外键关系

我有两张桌子,tabSpareParttabSparePartCategory.每个备件属于备件类别.我需要属于特定类别的所有备件.但问题是备件类别可能是另一个的"子类别",它们相互引用("主要类别"在此FK列中具有"空").

假设我需要所有备件fiSparePartCategory=1和属于属于"子类别"的类别的所有备件category=1.

如何编写返回所有备件的SQL查询,无论子类别有多少级别.我希望你理解我的要求.

以下是我所拥有的内容的说明.如何使其动态,以便它可以工作,无论子类别的数量?

蒂姆,谢谢

替代文字

链接到图像:http://www.bilder-hochladen.net/files/4709-lg-jpg.html

编辑:以下是另一种静态方法,只有一个子类别级别时才有效:

SELECT     SparePartName
FROM         tabSparePart
WHERE     (fiSparePartCategory IN
               (SELECT     idSparePartCategory
                     FROM          tabSparePartCategory
                     WHERE      (idSparePartCategory = 1) OR
                                (fiSparePartCategory = 1)))
Run Code Online (Sandbox Code Playgroud)

sql sql-server foreign-key-relationship

4
推荐指数
1
解决办法
2767
查看次数

在mvc中的下拉列表中使用外键

我是MVC的新手,并坚持应该是一个非常直接的问题.我正在完成这个教程并得到了一切非常有用的工作,除了我现在想要添加一个外键'链接'(不确定它叫什么)但似乎无法让它工作.这就是我所拥有的:

表:

 Inventory:
 Id   |  SerialNumber  | ManufacturerId (foreignkey to Manufactueres->id)

 Manufactureres
 Id (primary key)   |  Name
Run Code Online (Sandbox Code Playgroud)

模型(InventoryItem.cs):

 public class InventoryItem {
     public int Id {get; set; }
     public int SerialNumber{ get; set; }

     //this starts the trouble, I actually want to interact with the Manufactureres table -> Name column
     public int ManufacturerId { get; set; }  
 }
Run Code Online (Sandbox Code Playgroud)

查看(Create.cshtml):

 ...
 //What i really want is a dropdown of the values in the Manufactureres table
 @Html.EditorFor(model=> model.ManufacturerId)
Run Code Online (Sandbox Code Playgroud)

当使用关系数据库时,这必然是一个常见的问题,将会有许多外键关系被使用/显示,但由于某种原因,我无法在stackoverflow上找到直接对应于如此简单的东西的教程或问题.非常感谢任何指导或方向!谢谢,

foreign-key-relationship asp.net-mvc-3

4
推荐指数
1
解决办法
1万
查看次数

我可以在两个不同的表中使用相同的外键约束吗?

我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,因此我为它们创建了两个单独的表。在我的内部表中,我具有以下字段:

f_name VARCHAR(32),
l_name VARCHAR(32),
empl_status_id INT,
admin_grp_id INT,
reliab_status_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)

我的外部表具有以下内容:

f_name VARCHAR(32),
l_name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(20),
org_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)

我意识到我可以创建一个单独的表,其中包含用户名和指向内部或外部的外键,但是除此之外,我还向我的内部表添加了一个外键约束,该约束引用supv_id了另一个内部用户。我叫它fk_supv_id。当我尝试对外部用户表执行相同操作时,我得到了ERROR 1005 (HY000)

最初我无法弄清楚问题出在哪里,但是当我尝试使用其他名称来解决问题时,它就起作用了(即fk_supv_id,我没有像内部调用那样调用它fk_xtsupv_id)。

所以我的问题是,正确的方法是什么?这是两个不同表中的相同外键。在这两种情况下,它都是指内部用户。没有两个不同的名称,有没有办法做到这一点?或者我应该选择的名称理念的表和添加supv_id约束沿该表f_namel_nameuser_type

建议和建议,

谢谢!:)

mysql database foreign-keys foreign-key-relationship

4
推荐指数
1
解决办法
1万
查看次数

如何在ASP.NET MVC中显示外键字段的显示名称

我见过很多类似的问题,但似乎都没有直接的答案.当我尝试将显示(名称)属性添加到外键字段时,显示名称不会显示在创建,编辑,删除和详细信息表单上.我尝试将属性也放在导航属性上:

[Display(Name="Gender")]
public virtual Gender Gender {get; set;}
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.

public class Person
{
    public int ID {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    [Display(Name="Gender")]
    public int GenderID {get; set;}

    public virtual Gender Gender {get; set;}
}


public class Gender
{
    public int ID {get; set;}
    public string GenderName {get; set;}

    public virtual ICollection<Person> People {get; set;}       
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc foreign-key-relationship data-annotations displayname-attribute

4
推荐指数
1
解决办法
3896
查看次数