是否禁用和启用SQL Server支持的外键约束?或者是我唯一的选择drop,然后重新create约束?
为什么没有一个TRUNCATE上mygroup工作?即使ON DELETE CASCADE SET我得到了:
错误1701(42000):无法截断外键约束中引用的表(
mytest.instance,CONSTRAINTinstance_ibfk_1FOREIGN KEY(GroupID)REFERENCESmytest.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) REFERENCES mygroup(ID) ON DELETE CASCADE,
UNIQUE(GroupID)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud) 在MySQL中,如何获取指向特定表的所有外键约束的列表?一个特定的专栏?这与Oracle问题相同,但对MySQL而言.
使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?
我知道我也可以
DELETE不带where子句然后RESEED使用身份(或)我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:
无法截断表'TableName',因为它正被FOREIGN KEY约束引用.
我经常使用"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
);
Run Code Online (Sandbox Code Playgroud)
对于"ON DELETE CASCADE",如果id删除了具有a的父级,parent_id = parent.id则将自动删除子级中的记录.这应该没问题.
这意味着当id更新父级时,"ON UPDATE CASCADE"会做同样的事情吗?
如果(1)为真,则意味着如果parent.id不可更新(或永远不会更新),则不需要使用"ON UPDATE CASCADE",就像它是AUTO_INCREMENT或者总是设置为TIMESTAMP.是对的吗?
如果(2)不成立,在其他什么情况下我们应该使用"ON UPDATE CASCADE"?
如果我(由于某种原因)更新了child.parent_id不存在的内容,它会被自动删除吗?
好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商.
请说清楚.
是否有一种很简单的方法可以从MySQL数据库中删除所有表,忽略可能存在的任何外键约束?
我正在尝试将我的新架构转发到我的数据库服务器上,但我无法弄清楚为什么我收到此错误.我试图在这里搜索答案,但我发现的所有内容都说要么将数据库引擎设置为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` (`Clients_Case_Number` ASC) ,
CONSTRAINT `fk_Clients_has_Staff_Clients`
FOREIGN KEY (`Clients_Case_Number` )
REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Clients_has_Staff_Staff1`
FOREIGN KEY (`Staff_Emp_ID` )
REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` …Run Code Online (Sandbox Code Playgroud) Postgres会自动将索引放在外键和主键上吗?我该怎么说?是否有一个命令可以返回表上的所有索引?
我想将一个外键添加到名为"katalog"的表中.
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我收到此错误消息:
Run Code Online (Sandbox Code Playgroud)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 resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
Run Code Online (Sandbox Code Playgroud)
当我使用此查询时它可以工作,但错误的"删除"操作:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Run Code Online (Sandbox Code Playgroud)
两个表都是InnoDB,两个字段都是"INT(11)not null".我正在使用MySQL 5.1.61.尝试在MacBook Pro上使用MySQL …
我正在对数据库应用程序进行一些维护工作,并且我发现,欢乐的乐趣,即使来自一个表的值正在使用外键的样式,表上没有外键约束.
我正在尝试在这些列上添加FK约束,但我发现,因为表中的错误数据已经完全加载了以前的错误,这些错误已经被天真地纠正过,我需要找到没有的行.匹配其他表,然后删除它们.
我在网上找到了一些这种查询的例子,但它们似乎都提供了例子而不是解释,我不明白为什么它们起作用.
有人可以向我解释如何构建一个查询,该查询返回在另一个表中没有匹配的所有行,以及它正在做什么,以便我可以自己进行这些查询,而不是为这个混乱中的每个表运行到SO 没有FK约束?
foreign-keys ×10
mysql ×5
sql ×3
constraints ×2
innodb ×2
sql-server ×2
t-sql ×2
truncate ×2
database ×1
dml ×1
postgresql ×1
sql-drop ×1