2017-07-26 3 views
0

Ich habe eine Tabelle namens Nutznießer mit folgenden SpaltenProblem mit mysql Befehl

custid varchar 
accno varchar primarykey 
name varchar 

Ich habe einen Datensatz in der Tabelle mit Werten

101 
12345 
john 

Jetzt muss ich für einen anderen custid einen Datensatz einfügen, aber gleich accno

var data={"custid":"102","accno":"12345","name":"john"}; 
con.query('insert into benificiaries set ?',data) 

Aber es ist nicht erlaubt seit accno ist Primärschlüssel..So wie kann ich thi einfügen s? Ich kann dasselbe Konto nicht einmal für verschiedene custid.Any Ideen haben?

+0

Wenn mehrere Einträge mit demselben accno vorhanden sein können, ist accno kein Primärschlüssel. Machen Sie einen [zusammengesetzten Primärschlüssel] (https://en.wikipedia.org/wiki/Compound_key) aus accno und custid, und Sie sollten eingestellt werden. –

+0

@ConCave Dann, was wird Abfrage sein, um diese Tabelle zu erstellen? Ich habe keine Ahnung davon – user7350714

Antwort

0

das nicht möglich ist, haben Sie KONTNR und custid als Verbund Schlüssel

+0

Dann, wie die Tabelle in diesem Fall erstellt werden muss? – user7350714

+0

siehe Beitrag von ConCave, es hat die Beispieltabelle – Kisoma

0

Sie einfach kann dies nicht tun, machen, weil Sie KONTNR als Primärschlüssel definiert haben. Primärschlüssel ist genau das - der Primärschlüssel des Datensatzes. Es ist ein eindeutiger Wert, der diesen Datensatz und nur diesen Datensatz positiv identifiziert. Wenn Sie nicht garantieren können, dass Daten pro Datensatz eindeutig sind, kann dies nicht Ihr Primärschlüssel sein.

Diese Tabelle scheint mir eine Zuordnungstabelle. Ist es? Wenn ja, braucht es wirklich keinen Primärschlüssel. Wenn Sie unbedingt einen Primärschlüssel aus irgendeinem Grund geben müssen, geben Sie der Tabelle einfach einen Ersatzschlüssel mit einer autoinkrementierenden Integer-Spalte und machen Sie diesen Primärschlüssel für diese Tabelle.

Wie wird diese Tabelle verwendet? Ich würde sagen, schrauben Sie einen Primärschlüssel und Index nur auf accno und Custid Spalten (wenn Sie Lookups von jedem tun).

Wenn die Kombination von accno und custid eindeutig ist (wahrscheinlich ist, was diese Tabelle zu sein scheint), dann können Sie Ihren Primärschlüssel als eine Kombination aus accno und custid definieren.

Wenn Sie aus irgendeinem Grund mehr als einen Datensatz mit denselben Werten für diese beiden Felder haben möchten, haben Sie in dieser Tabelle sowieso keinen natürlichen Schlüssel.

+0

Ich kann das gleiche accountno für einen custid..Für ex haben, wenn es custid 1 und accno 12345 gibt ... Dann kann ich das gleiche accno für custid 1 nicht haben aber ein anderes custid kann haben accno 12345 ... Also, welche Abfrage können wir in diesem Fall erstellen Tabelle – user7350714

+0

irgendeine Idee, wie die Tabelle in diesem Fall erstellt werden muss? – user7350714

0

Da es mehrere Einträge mit demselben accno geben kann, ist accno kein Primärschlüssel. Erstellen Sie einen zusammengesetzten Primärschlüssel aus accno und custid, und Sie sollten festgelegt werden.

CREATE TABLE beneficiaries (
    custid INT, 
    accno INT, 
    name varchar 
    PRIMARY KEY (custid, accno) 
) 
+1

accno muss aus der Primary Key-Einschränkung entfernt werden und stellen Sie bitte einen varchar() - Parameter und ein Semikolon am Ende Ihres Codes bereit. –

1

Schauen Sie sich Ihre MySQL-Code hier:

CREATE TABLE beneficiaries (
custid INT PRIMARY KEY, 
accno INT, 
name varchar(30) 
); 


Als Primärschlüssel CustID und beachten Sie die Datentypen I für jede Spalte verwendet haben.