簡體   English   中英

MySQL中的自引用表字段

[英]Self-Referential Table Fields In MySQL

我有一個表,其中有一個“外鍵”引用自己。 這將是非常有用的,除了我不確定如何將第一條記錄添加到這樣的表。 無論我添加什么,我都無法為表本身提供有效的“外來”密鑰,也沒有條目。 也許我沒有正確地解決這個問題,但我希望這個表能夠代表一直是其中的一員。 有沒有辦法“引導”這樣的表,或另一種方式去自我引用?

一個選項是使您的字段為NULL -able,並將根記錄的父鍵設置為NULL

CREATE TABLE tb_1 (
   id       int   NOT NULL  PRIMARY KEY,
   value    int   NOT NULL,
   parent   int   NULL,
   FOREIGN KEY (parent) REFERENCES tb_1(id)
) ENGINE=INNODB;
Query OK, 0 rows affected (0.43 sec)

-- This fails:
INSERT INTO tb_1 VALUES (1, 1, 0);
ERROR 1452 (23000): A foreign key constraint fails.

-- This succeeds:
INSERT INTO tb_1 VALUES (1, 1, NULL);
Query OK, 1 row affected (0.08 sec)

否則,您仍然可以使用NOT NULL父鍵並將其指向根記錄本身:

CREATE TABLE tb_2 (
   id       int   NOT NULL  PRIMARY KEY,
   value    int   NOT NULL,
   parent   int   NOT NULL,
   FOREIGN KEY (parent) REFERENCES tb_2(id)
) ENGINE=INNODB;
Query OK, 0 rows affected (0.43 sec)

-- This fails:
INSERT INTO tb_2 VALUES (1, 1, 0);
ERROR 1452 (23000): A foreign key constraint fails.

-- This succeeds:
INSERT INTO tb_2 VALUES (1, 1, 1);
Query OK, 1 row affected (0.08 sec)

你可以這樣做:

SET FOREIGN_KEY_CHECKS = 0;

然后執行插入,然后將其重新設置為1。 它是一個會話變量,因此斷開連接將重置它,並且它不會影響其他連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM