2017-05-10 5 views
0

Ich habe die folgende Tabelle:SQL - mehrreihige Einsatz für FK

| order_details | CREATE TABLE `order_details` (
    `order_id` int(11) NOT NULL, 
    `client_id` int(11) NOT NULL, 
    `product_id` varchar(10) NOT NULL, 
    `serial` int(11) NOT NULL, 
    `detail_id` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`detail_id`), 
    KEY `order_id` (`order_id`), 
    KEY `client_id` (`client_id`), 
    CONSTRAINT `order_details_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`order_id`), 
    CONSTRAINT `order_details_ibfk_2` FOREIGN KEY (`client_id`) REFERENCES `clients` (`client_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 | 

Ich versuche Werte nach unten mehrere Zeilen in der client_id Spalte einzufügen:

insert into order_details 
    (`client_id`) 
    values 
    (1), 
    (1), 
    (1), 
    (1), 
    (2), 
    (3), 
    (14), 
    (4), 
    (5), 
    (5), 
    (5), 
    (5), 
    (7), 
    ... 
    (12), 
    (13); 

Wenn ich versuche, die auszuführen Einfügen mit striktem Modus aus, erhalte ich einen Fremdschlüssel-Constraint-Fehler (Err: 1452). Es scheint jedoch zu versuchen, in die Spalte order_id im Gegensatz zu client_id einzufügen (siehe err msg). Was könnte diesen Fehler verursachen und wie kann ich die Einfügung in die Spalte client_id umleiten?

Fehler: Nachricht

kann nicht hinzugefügt oder ein Kind Zeile aktualisieren: ein Fremdschlüssel nicht (dborder_details, CONSTRAINT order_details_ibfk_1 FOREIGN KEY (order_id) LITERATUR orders (order_id).)

Antwort

1

Sie müssen alle nicht null-Spalten in dem Einsatz zur Liste:

insert into order_details 
    (`client_id`, [other columns here]) 
values 
(1, [other values here]), 
+0

Perfect, danke. Wenn ich in diesen Feldern bereits Werte habe und diese nicht überschreiben möchte, sollte ich einfach null übergeben? –

+0

@RayFoo Wie können Sie Werte in diesen Feldern haben? Dies sind neue Zeilen, die Sie erstellen. – Barmar

+0

Die andere Möglichkeit besteht darin, einen 'DEFAULT'-Wert in der Anweisung' CREATE TABLE' zu deklarieren. – Barmar

0

Fehlermeldung ist ziemlich einfach ... Sie versuchen, null Wert zu not null Spalten wie einfügen die untenstehenden. Ihre insert Erklärung ist fehlerhaft.

order_id int(11) NOT NULL 
    `product_id` varchar(10) NOT NULL, 
    `serial` int(11) NOT NULL,