teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コードブロックを追加

2020/06/23 23:16

投稿

mikan123
mikan123

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,24 +1,24 @@
1
1
  ### 前提
2
2
  WordPressで`CREATE TABLE`しています。
3
3
 
4
- 外部キーの設定にあたって、CONSTRAINTを介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
4
+ 外部キーの設定にあたって、`CONSTRAINT`を介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
5
5
 
6
6
  これにつきまして以下の点を知りたいと思っています。
7
7
 
8
8
  ###知りたいこと
9
9
  【1】
10
- なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?
10
+ なぜ`CONSTRAINT`を介さないとインデックスが貼られないのでしょうか?
11
11
 
12
- [MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下のCREATE文の
12
+ [MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下の`CREATE`文の
13
13
  `FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID),`
14
14
  という行での外部キー設定ではいかにしてその機能を逃れ、インデックスが貼られずに済んでいるのでしょうか?
15
15
 
16
- MariaDBだから自動で貼られないのでしょうか?しかしCONSTRAINTを介した
16
+ MariaDBだから自動で貼られないのでしょうか?しかし`CONSTRAINT`を介した
17
17
  `CONSTRAINT fk_wp_seconds_01 FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID)`
18
18
  という行では自動で貼られていますし、謎です。
19
19
 
20
20
  【2】
21
- 使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかしCONSTRAINTを介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
21
+ 使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかし`CONSTRAINT`を介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
22
22
 
23
23
  【3】
24
24
  WordPerssユーザーのみなさんは、どのように外部キーをセットしていますか?
@@ -28,13 +28,13 @@
28
28
 
29
29
 
30
30
  ###発生している問題
31
- 該当のソースコードを実行しますと、wp_secondsテーブルに作成されるインデックスは下図の3つとなります。
31
+ 該当のソースコードを実行しますと、`wp_seconds`テーブルに作成されるインデックスは下図の3つとなります。
32
32
 
33
- CONSTRAINTを介して作成された外部キー(fk_wp_seconds_01)はインデックスが貼られ、介さない方の外部キーでは貼られないのです。
33
+ `CONSTRAINT`を介して作成された外部キー(`fk_wp_seconds_01`)はインデックスが貼られ、介さない方の外部キーでは貼られないのです。
34
34
  ![イメージ説明](ba8f08bceac423827df33e1a191bc2f5.jpeg)
35
35
 
36
36
  ### 該当のソースコード
37
- wp_firstsテーブルと、そのIDカラムを外部キーに持つwp_secondsテーブルのCREATE文になります。
37
+ `wp_firsts`テーブルと、その`ID`カラムを外部キーに持つ`wp_seconds`テーブルの`CREATE`文になります。
38
38
  ```PHP
39
39
  create_wp_firsts();
40
40
  create_wp_seconds();
@@ -81,7 +81,7 @@
81
81
  ```
82
82
 
83
83
  ### 試したこと
84
- wp_secondsテーブルに対しSHOW CREATE TABLEを実行すると以下の出力を得ましたが、さらに訳の分からないことになりました。
84
+ `wp_seconds`テーブルに対し`SHOW CREATE TABLE`を実行すると以下の出力を得ましたが、さらに訳の分からないことになりました。
85
85
 
86
86
 
87
87
  ```SQL
@@ -96,9 +96,9 @@
96
96
  CONSTRAINT `wp_seconds_ibfk_1` FOREIGN KEY (`first_ID`) REFERENCES `wp_firsts` (`ID`)
97
97
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8
98
98
  ```
99
- この結果によれば、外部キーの設定はいずれもCONSTRAINTを介してされているのです。
99
+ この結果によれば、外部キーの設定はいずれも`CONSTRAINT`を介してされているのです。
100
100
 
101
- ならばなぜ、fk_wp_seconds_01だけインデックスが貼られ、wp_seconds_ibfk_1は貼られないのか…訳がわからなくなてきました。
101
+ ならばなぜ、`fk_wp_seconds_01`だけインデックスが貼られ、`wp_seconds_ibfk_1`は貼られないのか…訳がわからなくなてきました。
102
102
  ### 補足情報(FW/ツールのバージョンなど)
103
103
 
104
104
  サーバーはGMOサーバーです。

1

知りたいことを修正

2020/06/23 23:16

投稿

mikan123
mikan123

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 前提
2
- WordPressでCREATE TABLEしています。
2
+ WordPressで`CREATE TABLE`しています。
3
3
 
4
4
  外部キーの設定にあたって、CONSTRAINTを介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
5
5
 
@@ -7,8 +7,16 @@
7
7
 
8
8
  ###知りたいこと
9
9
  【1】
10
- なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?[MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下のCREATE文はいかにしてその機能を逃れ、インデックスが貼られずに済んでいるのでしょうか?(MariaDBだから自動で貼られないのでしょうか?しかしCONSTRAINTを介せば自動で貼られるし、謎です。)
10
+ なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?
11
11
 
12
+ [MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下のCREATE文の
13
+ `FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID),`
14
+ という行での外部キー設定ではいかにしてその機能を逃れ、インデックスが貼られずに済んでいるのでしょうか?
15
+
16
+ MariaDBだから自動で貼られないのでしょうか?しかしCONSTRAINTを介した
17
+ `CONSTRAINT fk_wp_seconds_01 FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID)`
18
+ という行では自動で貼られていますし、謎です。
19
+
12
20
  【2】
13
21
  使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかしCONSTRAINTを介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
14
22