2017-04-21 5 views
-1

in meiner MySQL-Datenbank Ich habe zwei Tabelle Überprüfung und ProdukteMysql Fehler kann nicht über Fremdschlüssel hinzufügen, wenn i Fremd add key

mysql> desc review; 
+---------------+--------------+------+-----+-------------------+----------------+ 
| Field   | Type   | Null | Key | Default   | Extra   | 
+---------------+--------------+------+-----+-------------------+----------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment | 
| review  | varchar(255) | YES |  | NULL    |    | 
| rating  | varchar(255) | YES |  | NULL    |    | 
| created_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| updated_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| reviewer_name | varchar(255) | YES |  | NULL    |    | 
| product_id | int(11)  | YES |  | NULL    |    | 
+---------------+--------------+------+-----+-------------------+----------------+ 

mysql> desc products; 
+---------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(255)  | NO |  | NULL |    | 
| details | text    | NO |  | NULL |    | 
+---------+------------------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

Wenn ich versuche product_id im Rückblick Tabelle als Fremdschlüssel zu machen, die ID verweisen i Artikel Tabelle gefunden diesen Fehler und die Abfrage, was ich gab, war:

mysql> ALTER TABLE review ADD FOREIGN KEY (product_id) REFERENCES products(id); 
ERROR 1215 (HY000): Cannot add foreign key constraint 

Bitte helfen sie mir, was das Problem ist und wie kann ich es herausfinden

+0

Wahrscheinlich wegen Datentyp Präzision Diskrepanz zwischen int 10 und int 11 – GurV

+0

So bekommen, was ich – Karthiga

+0

jetzt tun wollen Ja, ich geändert und es richtig funktioniert ... Danke – Karthiga

Antwort

1

es können zwei rea sein Söhne für den Fehler.

Der Datentyp Präzision unterscheidet sich für zwei Spalten, dh

products -> id | int(10) unsigned // here int(10) 
product_id  | int(11)   // here int(11) 

die Präzision gleiche machen, indem die Tabellenstruktur zu verändern

Fremdschlüssel Beziehung der Spalte übergeordnete Tabelle versenden zu erstellen, muss sein einzigartig oder eine primäre Spalte.

So prüfen Sie, ob products(id) primäre oder einzigartig ist, wenn es nicht primär oder einzigartig machen.

+0

I brauche eine weitere Hilfe, wenn ich versuche, Werte in die Review-Tabelle einzufügen mysql> in die Werte review (review, rating, reviewer_name, product_id) einzufügen ('Produkte sind gut', '4', 'John Deo', '1'); FEHLER 1452 (23000): Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl ('birdys_dev'.'review', CONSTRAINT' review_ibfk_1' FREMDSCHLÜSSEL ('product_id') REFERENZEN' products' ('id')) ' – Karthiga

+0

Konnten Sie mir bitte helfen – Karthiga

+1

Mit Fremdschlüsselbeziehung können Sie nur jene Werte in die untergeordnete Tabelle einfügen, die sind bereits vorhanden in der Elterntabelle für die Fremdschlüsselbindungsspalten –

2

Die "Präzision" der Int-Typen bedeutet nichts. Es ist nur ein Hinweis für die Anzeigebreite. Es macht keinen Unterschied für die Größe des Datentyps.

Was ist Ihr Fehler verursacht wurde, dass Ihr products.id war int unsigned, aber sie versuchten, einen Fremdschlüssel für review.product_id die int war zu erklären (unterzeichnet).

Der Unterschied zwischen signed und unsigned int war, was die Datentypen für die referenzielle Integrität inkompatibel macht. Sie könnten eine int(10) unsigned und die andere int(327) unsigned machen und es wäre in Ordnung.

+0

Schöne Antwort .... –

0

ändern Sie Ihre Tabellenstruktur

id | int (11)

oder

product_id Set | int (10) unsigned

tun was Weg ist Teig für Sie. auch kann man auch ein besseres Verständnis über Fremdschlüssel von here

Verwandte Themen