我正在开发一个工具来合并两个具有相同架构但不同数据的数据库。
其中一部分是将所有外键更改为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=0?UPDATE IGNORE没有解决这个问题:(
mysql database foreign-keys foreign-key-relationship sql-update
我在使用 JPA2 (EclipseLink) 和 Spring Data 1.4.2 时遇到一些问题。就我而言,两个表具有一对一的关系:
表A:
表B:
所以我尝试做这个实体:
实体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 …
这可能是一个微不足道的问题,但在外键约束方面我仍然有点笨拙,所以我想确定一下。
假设我有一个包含countries字段country_id(PK) 和 ( FK) 的表name,以及一个cities包含字段city_id(PK)name和country_id(FK) 的表。
外键cities.country_id有约束ON DELETE SET NULL。countries据我了解,这意味着如果删除记录,则cities该删除记录的引用中的任何记录country_id都将其country_id字段设置为 NULL。
但是,如果cities.country_id具有属性怎么办NOT NULL?这会阻止外键约束正常工作吗?确实如此,但我只是想检查一下。
我的数据库中有两个表: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) 我使用 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) 我欢迎任何有关我的问题的帮助。我试图在多表继承情况下将关系向后跟踪到子类。
即我想要一个特定州所有餐馆的查询集。
这是我的问题的一个简化示例(对 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(),我会收到该州的一组地点查询,但我真的只想要该州的餐馆。
任何人都可以提供一些关于如何正确制定我的查询集的建议,或者提供一些关于如何实现这一目标的其他想法?
任何帮助将不胜感激
我有两张桌子,tabSparePart和tabSparePartCategory.每个备件属于备件类别.我需要属于特定类别的所有备件.但问题是备件类别可能是另一个的"子类别",它们相互引用("主要类别"在此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) 我是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上找到直接对应于如此简单的东西的教程或问题.非常感谢任何指导或方向!谢谢,
我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,因此我为它们创建了两个单独的表。在我的内部表中,我具有以下字段:
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_name,l_name和user_type?
建议和建议,
谢谢!:)
我见过很多类似的问题,但似乎都没有直接的答案.当我尝试将显示(名称)属性添加到外键字段时,显示名称不会显示在创建,编辑,删除和详细信息表单上.我尝试将属性也放在导航属性上:
[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
mysql ×4
sql ×4
foreign-keys ×3
database ×2
asp.net-mvc ×1
create-table ×1
django ×1
inheritance ×1
java ×1
jpa ×1
liquibase ×1
notnull ×1
spring ×1
sql-insert ×1
sql-server ×1
sql-update ×1