sql >> Database teknologi >  >> Database Tools >> phpMyAdmin

Selvrefererende tabelfelter i MySQL

En mulighed er at gøre dit felt NULL -able, og sæt rodpostens overordnede nøgle til 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)

Ellers kan du stadig bruge en NOT NULL overordnet nøgle og peg den til selve rodposten:

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)


  1. Hvad ville være en rettelse eller migrering af phpMyAdmins begrænsning på 20.000 rækker, og er noget virkelig ustabilt?

  2. Hvordan eksporterer jeg en bestemt kolonne i MySQL ved hjælp af phpmyadmin?

  3. Hvorfor slettes aliasnavne, der er de samme som kolonnenavne, når de gemmes som en visning?

  4. Fremmednøgle som primærnøgle