回答編集履歴
3
追記
answer
CHANGED
|
@@ -30,4 +30,46 @@
|
|
|
30
30
|
```
|
|
31
31
|
で外部キー制約を追加した後、articlesのcategory_idにはarticlecategoriesのidに存在するキーを入れる。
|
|
32
32
|
|
|
33
|
-
そうしておけばarticlecategoriesからユーザーがフィールドを削除したらそれに対応するarticlesのフィールドも削除されます。
|
|
33
|
+
そうしておけばarticlecategoriesからユーザーがフィールドを削除したらそれに対応するarticlesのフィールドも削除されます。
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### 2016/11/08 13:14と2016/11/08 13:19への回答追記
|
|
37
|
+
実際にどんなデータが入っているかわかりませんので、あくまでこちらの想像で簡易化して書きますが
|
|
38
|
+
articlecategoris.idがにたとえば今1,2,3,4,5が登録されてるとします。
|
|
39
|
+
|
|
40
|
+
その時
|
|
41
|
+
articlesにcategory_idというカラムを追加するのは
|
|
42
|
+
`alter table articles add category_id int NOT NULL default 0 after user_id; `
|
|
43
|
+
でできるが、その後articlesに対して外部キー制約を付与しようと
|
|
44
|
+
`alter table articles add foreign key (category_id) references articlecategories(id) on update cascade on DELETE CASCADE;`
|
|
45
|
+
を実行するとエラーがでた。
|
|
46
|
+
|
|
47
|
+
これを回避するのは上記にも書きましたが、articles.category_idの値をarticlecategoris.idに存在する値1,2,3,4,5のどれかが入っていいとチェックが入りSQLを成功できない。
|
|
48
|
+
|
|
49
|
+
なので方法として先に1,2,3,4,5の値を入れてから外部キー制約を実行するか、SQL実行時外部キーの整合生のチェックが入らないように
|
|
50
|
+
`SET FOREIGN_KEY_CHECKS=0;`
|
|
51
|
+
で外部キーチェックを無効にしてarticles.category_idを0のまま外部キー制約を付与するの2つを回答しました。
|
|
52
|
+
もちろんその後外部キーチェックをしてもらわないといけないので
|
|
53
|
+
`SET FOREIGN_KEY_CHECKS=1;`
|
|
54
|
+
で戻しておく。
|
|
55
|
+
|
|
56
|
+
そしてここからですが、もしSET FOREIGN_KEY_CHECKS=0の方法で追加した場合、データ的には
|
|
57
|
+
articles.category_idとarticlecategoris.idの整合生がおかしいままなのでarticles.category_idに1,2,3,4,5の中からデータを入れないといけない。
|
|
58
|
+
|
|
59
|
+
ここまでOKですか?
|
|
60
|
+
|
|
61
|
+
もし今後articlesにフィールドを追加する場合もarticles.category_idにはarticlecategoris.idの中に存在する値を指定しないと
|
|
62
|
+
defaultの0は入れる事ができないので、無理です。
|
|
63
|
+
|
|
64
|
+
なのでこの解決方法はarticlesにフィールド追加する際にはarticles.category_idを未指定(defaultの値が使われる)でのinsertは行わない。
|
|
65
|
+
という方法か、
|
|
66
|
+
defaultが0になっているのをdefaultを(確実に存在する値)1などにしてエラーが出ないようにする。
|
|
67
|
+
|
|
68
|
+
> こちら側でarticlecategories.id が1に「カテゴリなし」的な感じにしたフィールドをこちら側で1個挿入しておくべきでしょうか。
|
|
69
|
+
|
|
70
|
+
テーブルの名前からブログのカテゴリーのような感じなのかな?と思いますので、その方法はあだと思います。
|
|
71
|
+
articles.category_idのdefault値を1に変更、articlecategoris.idの1はカテゴリなしというようなフィールドにしておく
|
|
72
|
+
articles.category_idを未指定でinsertした記事はカテゴリーなしとして登録される。
|
|
73
|
+
|
|
74
|
+
という流れになるので良いと思います。
|
|
75
|
+
|
2
追記
answer
CHANGED
|
@@ -19,4 +19,15 @@
|
|
|
19
19
|
`既存のテーブルにあるフィールド群に値を手動で挿入するためのクエリとはどんな方法があるのでしょうか。`
|
|
20
20
|
とありますが、しばらく考えましたが、質問の意図がわかりません。
|
|
21
21
|
|
|
22
|
-
どのカラムに何を入れたいクエリを想定されてますか?
|
|
22
|
+
どのカラムに何を入れたいクエリを想定されてますか?
|
|
23
|
+
|
|
24
|
+
###追記
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
SET FOREIGN_KEY_CHECKS=0;
|
|
28
|
+
alter table articles add foreign key (category_id) references articlecategories(id) on update cascade on DELETE CASCADE;
|
|
29
|
+
SET FOREIGN_KEY_CHECKS=1;
|
|
30
|
+
```
|
|
31
|
+
で外部キー制約を追加した後、articlesのcategory_idにはarticlecategoriesのidに存在するキーを入れる。
|
|
32
|
+
|
|
33
|
+
そうしておけばarticlecategoriesからユーザーがフィールドを削除したらそれに対応するarticlesのフィールドも削除されます。
|
1
追記
answer
CHANGED
|
@@ -5,4 +5,18 @@
|
|
|
5
5
|
alter table articles add foreign key (category_id) references articlecategories(id) on update cascade on DELETE CASCADE;
|
|
6
6
|
SET FOREIGN_KEY_CHECKS=1;
|
|
7
7
|
```
|
|
8
|
-
とりあえず、チェック飛ばして外部キー制約のコマンド通してからデータがちゃんと紐づくように値入れていかれては?
|
|
8
|
+
とりあえず、チェック飛ばして外部キー制約のコマンド通してからデータがちゃんと紐づくように値入れていかれては?
|
|
9
|
+
|
|
10
|
+
###追記
|
|
11
|
+
|
|
12
|
+
とりあえず、foreign keyのSQLが通るようには回答したつもりですが、よくよく質問文を読むと
|
|
13
|
+
|
|
14
|
+
タイトルが
|
|
15
|
+
`MySQLで追加したカラムに値を挿入したいがdefaultは使いたくない`
|
|
16
|
+
|
|
17
|
+
質問文に
|
|
18
|
+
|
|
19
|
+
`既存のテーブルにあるフィールド群に値を手動で挿入するためのクエリとはどんな方法があるのでしょうか。`
|
|
20
|
+
とありますが、しばらく考えましたが、質問の意図がわかりません。
|
|
21
|
+
|
|
22
|
+
どのカラムに何を入れたいクエリを想定されてますか?
|