2016-11-19 21 views
1

私は親テーブルを持っています。顧客テーブルと子テーブルアドレス。私が顧客を作成したとき、私はADDRESSのリファレンスID 0を残して、後でそれを記入することができました。今はADDRESSES idをCustomersに挿入する時ですが、コマンドが実行されると重複エラーが発生します。MYSQL - キー 'PRIMARY'の重複エントリ '0'

insert into Customers (ADDRESS) select ID from Addresses ; 
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY' 

お客様

+---------+---------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+---------+---------------+------+-----+---------+-------+ 
| ID  | int(11)  | NO | PRI | NULL |  | 
| NAME | varchar(20) | NO |  | NULL |  | 
| AGE  | int(11)  | NO |  | NULL |  | 
| ADDRESS | int(11)  | NO |  | NULL |  | 
| SALARY | decimal(18,2) | YES |  | NULL |  | 
+---------+---------------+------+-----+---------+-------+ 
5 rows in set (0.00 sec) 

アドレス

+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| ID   | int(11)  | NO | PRI | NULL | auto_increment | 
| CUSTOMERID | int(11)  | NO |  | NULL |    | 
| CITY  | varchar(35) | YES |  | NULL |    | 
| COUNTRY | varchar(45) | YES |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 
4 rows in set (0.02 sec) 

お客様

+----+--------+-----+---------+---------+ 
| ID | NAME | AGE | ADDRESS | SALARY | 
+----+--------+-----+---------+---------+ 
| 0 | Matt | 24 |  0 | 2200.00 | 
| 1 | Andrew | 23 |  0 | 4400.00 | 
| 2 | John | 30 |  0 | 1200.00 | 
| 3 | Mike | 55 |  0 | 5500.00 | 
| 5 | George | 45 |  0 | 2300.00 | 
| 6 | Frank | 32 |  0 | 2300.00 | 
| 7 | George | 45 |  0 | 2700.00 | 
| 8 | Joe | 38 |  0 | 4350.00 | 
| 9 | Josh | 35 |  0 | 5050.00 | 
+----+--------+-----+---------+---------+ 

アドレス

+----+------------+----------+---------+ 
| ID | CUSTOMERID | CITY  | COUNTRY | 
+----+------------+----------+---------+ 
| 15 |   0 | Chicago | USA  | 
| 16 |   1 | Chicago | USA  | 
| 17 |   2 | London | ENG  | 
| 18 |   3 | New York | USA  | 
| 19 |   5 | New York | USA  | 
| 20 |   6 | New York | USA  | 
| 21 |   7 | Chicago | USA  | 
| 23 |   8 | Miami | NULL | 
| 25 |   9 | Miami | NULL | 

答えて

1

CustomerIdに自動インクリメントキーをCustomersにする必要があります。

これはあなたが直面している問題です。 Customer.Idinsertの値を指定していないため、MySQLはNULLを割り当てる傾向があります。しかし、プライマリキーはNULLにはできません。そのため、MySQLは値を0に変換することをお勧めします.2番目の挿入時に競合が発生します(すでに0の行がある場合)。

+0

わかりましたので、どのように代わりに別のテーブルからそれを更新していますか? – John

+0

@ジョン。 。 。何を更新しますか?私は別の質問をするべきだと思います。あなたのコメントの質問は、あなたが聞いた質問とはかなり違っているようです。 –

1

あなたはそれ以外のお客様への

挿入(ADDRESS)のアドレスから選択IDを使用して、顧客テーブル

`ID` int(11) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY (`id`) 

のための自動インクリメントを使用する必要があります。

あなたは(再び..適切なIDなしているが、0)新しい行を挿入しようとしている私は、その実際に作成し、新しい行を挿入しないとき

+0

ゴードンは技術的には最初でしたが、あなたは正しいです。ありがとうございました – John

+0

@ジョンさんありがとうございました。少なくとも希望希望料金は – scaisEdge

+0

ええ、私はすでにidです – John

関連する問題