concat_ws - mysql substring




Selbstreferentielle Tabellenfelder in MySQL (2)

Du könntest es tun:

SET FOREIGN_KEY_CHECKS = 0;

Führen Sie dann die Einfügung durch und stellen Sie sie danach auf 1 zurück. Es ist jedoch eine Sitzungsvariable, so dass eine Trennung sie zurücksetzt und andere Verbindungen nicht beeinflusst.

Ich habe eine Tabelle, die sich einen "Fremdschlüssel" nennt. Dies wäre sehr nützlich, außer dass ich nicht sicher bin, wie man den ersten Datensatz zu einer solchen Tabelle hinzufügt. Egal was ich hinzufüge, ich kann keinen gültigen "fremden" Schlüssel für die Tabelle selbst bereitstellen, noch keine Einträge. Vielleicht gehe ich nicht richtig vor, aber ich möchte, dass diese Tabelle etwas darstellt, das immer ein Mitglied von sich selbst ist. Gibt es eine Möglichkeit, eine solche Tabelle zu "booten" oder eine andere Möglichkeit, sich selbst zu referenzieren?


Eine Option besteht darin, Ihr Feld NULL -fähig zu machen und den übergeordneten Schlüssel des Stammdatensatzes auf 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)

Andernfalls könnten Sie immer noch einen NOT NULL Parent-Schlüssel verwenden und ihn auf den Root-Datensatz selbst verweisen:

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)






phpmyadmin