2013-03-11 46 views
31

SQL için çok yeni ve yeni bir sütun oluşturmak için basit bir ALTER TABLE gerçekleştirmeye çalışıyorum ve veritabanımda başka bir basit tabloya başvurmak için bir yabancı anahtar olarak kullanıyorum. Ben InnoDB'nin olmak hem tabloları deđiţtirdiđiniz AncakYabancı Anahtar (MySQL) nasıl eklenir

, ALTER tablo kodu çalıştırırken, aşağıdaki hatayı alıyorum:

Tablo 1: Aşağıda

Error 1452 Cannot add or update a child row: 
a foreign key constraint fails (`toys`.<result 2 when 
explaining filename '#sql-6d4_6'>, CONSTRAINT 
`#sql-6d4_6_ibfk_1` FOREIGN KEY (`toy_id`) REFERENCES `toys` (`toy_id`))  

hem tabloları DESC şunlardır:

FIELD  TYPE  NULL KEY  EXTRA 
toy_id  int(11) NO  PRI  auto_increment 
toy varchar(50) YES   

Tablo 2:

FIELD  TYPE  NULL KEY  EXTRA 
boy_id  int(11)  NO  PRI  auto_increment 
boy   varchar(50) YES 

Ve bu gerçekleştirmeye çalışıyordu ALTER sorgusu: Ben bunu anlamaya çalışıyorum her yerinde baktım

ALTER TABLE boys 
    ADD COLUMN toy_id INT NOT NULL, 
    ADD CONSTRAINT toys_toy_id_fk 
    FOREIGN KEY(toy_id) 
    REFERENCES toys(toy_id); 

ama hiç şansım. Şimdiden teşekkürler ve bu newbie :) karşı nazik olun

DÜZENLEME: İşte

GÖSTER hem tabloları için CREATE TABLE şunlardır:

TABLO 1:

CREATE TABLE `toys` (
     `toy_id` int(11) NOT NULL AUTO_INCREMENT, 
     `toy` varchar(50) DEFAULT NULL, 
     PRIMARY KEY (`toy_id`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 

TABLO 2:

CREATE TABLE `boys` (
     `boy_id` int(11) NOT NULL AUTO_INCREMENT, 
     `boy` varchar(50) DEFAULT NULL, 
     PRIMARY KEY (`boy_id`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 
+0

son 'ADD' kaldır –

+0

ADD CONSTRAINT öğesini kaldırmayı ve ADD FOREIGN ANAHTAR'ı bırakmayı ve ayrıca ADD CONSTRAINT öğesini bırakmayı ve FOREIGN KEY'den önce "ADD" yi kaldırmayı denedim, ancak aynı hatayı aldım. – Keith

+0

"OLUŞTURMA MASA TABLO OYUNU" ve "OLUŞTUR MASA MASA ÇOCUĞU" ifadesini yayınlayabilir misiniz? –

cevap

44

Sıfır satırdan daha fazlasına sahip bir tabloya coluken NOT NULL sütunu ekleyemezsiniz mn, üst tablodaki değerlerle eşleşen değerlerle sınırlıdır ve yalnızca NULL değeri vardır, çünkü DEFAULT içermeyen yeni ve gösterilmemiş bir sütun.

Çözüm, bu aşamaları aşamalı olarak yapmaktır: sütunu ekleyin, ancak NOT NULL olarak bildirmeyin ve henüz yabancı anahtarı bildirmeyin. Daha sonra, oyuncak tablonuzdaki bazı değerlerle eşleşen geçerli verilerle doldurun. Daha sonra, oyuncak tablonuzdaki bazı değerlerle eşleşen geçerli verilerle doldurun. YABANCI KEY (toy_id) toys_toy_id_fk SıNıRLAMA ADD ... `...`:

UPDATE boys SET toy_id = ...; 

Sonra NOT NULL olmak Sütun değiştirme ve kısıtlama oluşturmak:

ALTER TABLE boys MODIFY COLUMN toy_id INT NOT NULL, 
ADD CONSTRAINT toys_toy_id_fk 
FOREIGN KEY(toy_id) 
REFERENCES toys(toy_id); 
+0

için "OLUŞTURMA MASA TABLOSU" eklemek için yazı güncelleştirildi, "auto_increment = 6" fark etmiş olmalı. –

+0

Bu mükemmel çalıştı, çok teşekkür ederim! – Keith

İlgili konular