请允许我用一个例子详细说明这个问题。我写的是 透视
(1)字节码不应该用于实现逻辑 在数据库引擎中实现(希望更有效)(例如,如果我们 作为SQL查询的结果,需要过滤掉500行中的20行 我们应该写一个更好的where子句),那个
(2)我只有一个概念 了解外键(例如,它们自动创建,管理和执行 保持不同表之间数据完整性所需的约束。)
现在,让我们考虑一个包含4个表和15列的简单模式 如下(假设所有列都不为空):
people
pid bigint autoinc PK
fname varchar(32)
lname varchar(32)
dob date
sex char(1)
addyID bigint FK to address(aid)
relationship
relof bigint FK to people(pid)
relto bigint FK to people(pid)
relis tinyint
address
aid bigint autoinc PK
street varchar(128)
zipcode int FK to z2cs(zip)
z2cs
zip int PK
city varchar(64)
state char(2)
期望(请回答以下6的真/假)
如果上述任何一项的答案都是错误的,请指导我找到 究竟什么是MySql中的外键合约。谢谢。
PS:如果您回答[6]的回答,请与大家分享一下这句话。
奖金问题(与FK无关):
如何为满足以下约束的关系表编写create语句:
答案 0 :(得分:0)
<强> 1。可以使用指向同一表的不同行的外键来创建上述表关系
不,FK只能指向一行。但是,行可以被许多其他行引用,例如,地址可以被许多人引用。
<强> 2。如果人员中缺少relof或relto,则向关系添加行会抛出SQLException
YES。
第3。如果我们在地址中添加一行,我们不需要检查z2cs中是否存在zipcode - 缺少zip会抛出SQLException
YES。
<强> 4。如果在人员中使用了辅助,则尝试从地址中删除行会引发异常
是,如果FK中没有级联删除,则会自动删除 进入人而不是失败。
<强> 5。如果在relto或relof列中的关系中使用pid,则尝试从人员中删除行会导致错误
是,见4。
<强> 6。存在一个SQL语句,它允许您查找表中的哪些列是外键以及它们引用哪个表(列)(我知道“描述tablename”不会这样做,尽管我觉得应该这样做)
AFAIK。 MySQL中应该有一个信息模式,您可以从中查询信息。
<强> B1。 relof和relto不能相同
在更新或插入时使用触发器来验证这一点。 PostgreSQL知道CHECK约束,这可能也可以在MySQL中使用,但是你可以选择触发器。
<强> B2。 relof和relto的组合是独一无二的
这两列上的组合UNIQUE INDEX是你的朋友。