标签: foreign-keys

如何使用T-SQL临时禁用外键约束?

是否禁用和启用SQL Server支持的外键约束?或者是我唯一的选择drop,然后重新create约束?

t-sql sql-server constraints foreign-keys

805
推荐指数
10
解决办法
59万
查看次数

如何截断外键约束表?

为什么没有一个TRUNCATEmygroup工作?即使ON DELETE CASCADE SET我得到了:

错误1701(42000):无法截断外键约束中引用的表(mytest.instance,CONSTRAINT instance_ibfk_1FOREIGN KEY(GroupID)REFERENCES 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) REFERENCES mygroup(ID) ON DELETE CASCADE,
   UNIQUE(GroupID)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

mysql truncate constraints foreign-keys dml

601
推荐指数
9
解决办法
46万
查看次数

如何查看表或列的所有外键?

在MySQL中,如何获取指向特定表的所有外键约束的列表?一个特定的专栏?这与Oracle问题相同,但对MySQL而言.

mysql innodb foreign-keys

526
推荐指数
11
解决办法
40万
查看次数

无法截断表,因为它是由FOREIGN KEY约束引用的?

使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?

我知道我也可以

  • 使用DELETE不带where子句然后RESEED使用身份(或)
  • 删除FK,截断表,然后重新创建FK.

我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:

无法截断表'TableName',因为它正被FOREIGN KEY约束引用.

t-sql sql-server truncate sql-server-2005 foreign-keys

427
推荐指数
16
解决办法
61万
查看次数

何时使用"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
);
Run Code Online (Sandbox Code Playgroud)

对于"ON DELETE CASCADE",如果id删除了具有a的父级,parent_id = parent.id则将自动删除子级中的记录.这应该没问题.

  1. 这意味着当id更新父级时,"ON UPDATE CASCADE"会做同样的事情吗?

  2. 如果(1)为真,则意味着如果parent.id不可更新(或永远不会更新),则不需要使用"ON UPDATE CASCADE",就像它是AUTO_INCREMENT或者总是设置为TIMESTAMP.是对的吗?

  3. 如果(2)不成立,在其他什么情况下我们应该使用"ON UPDATE CASCADE"?

  4. 如果我(由于某种原因)更新了child.parent_id不存在的内容,它会被自动删除吗?

好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商.

请说清楚.

sql foreign-keys foreign-key-relationship

407
推荐指数
6
解决办法
30万
查看次数

MySQL DROP所有表,忽略外键

是否有一种很简单的方法可以从MySQL数据库中删除所有表,忽略可能存在的任何外键约束?

mysql innodb foreign-keys sql-drop

358
推荐指数
15
解决办法
33万
查看次数

MySQL错误1215:无法添加外键约束

我正在尝试将我的新架构转发到我的数据库服务器上,但我无法弄清楚为什么我收到此错误.我试图在这里搜索答案,但我发现的所有内容都说要么将数据库引擎设置为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)

mysql foreign-keys

314
推荐指数
10
解决办法
44万
查看次数

外键和主键的Postgres和索引

Postgres会自动将索引放在外键和主键上吗?我该怎么说?是否有一个命令可以返回表上的所有索引?

sql database postgresql foreign-keys

308
推荐指数
7
解决办法
11万
查看次数

将外键添加到现有表

我想将一个外键添加到名为"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)

当我尝试这样做时,我收到此错误消息:

Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Run Code Online (Sandbox Code Playgroud)

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 …

mysql foreign-keys

294
推荐指数
7
解决办法
58万
查看次数

如何在另一个表中选择没有匹配条目的行?

我正在对数据库应用程序进行一些维护工作,并且我发现,欢乐的乐趣,即使来自一个表的值正在使用外键的样式,表上没有外键约束.

我正在尝试在这些列上添加FK约束,但我发现,因为表中的错误数据已经完全加载了以前的错误,这些错误已经被天真地纠正过,我需要找到没有的行.匹配其他表,然后删除它们.

我在网上找到了一些这种查询的例子,但它们似乎都提供了例子而不是解释,我不明白为什么它们起作用.

有人可以向我解释如何构建一个查询,该查询返回在另一个表中没有匹配的所有行,以及它正在做什么,以便我可以自己进行这些查询,而不是为这个混乱中的每个表运行到SO 没有FK约束?

sql foreign-keys

291
推荐指数
5
解决办法
36万
查看次数