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

回答編集履歴

4

注意点を

2020/01/13 06:53

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -2,24 +2,26 @@
2
2
 
3
3
  調べたらSQLiteでもバルクインサートが使えるようなので。
4
4
 
5
+ ##行程
5
6
  1. テーブルAと全く同じテーブルADASHを作る。
6
7
  2. テーブルBから取得したデータをテーブルADASHにバルクインサートで挿入
7
8
  3. テーブルAを空にする。もし、残したいデータも存在する場合は該当条件のものだけをidなどで紐付け、delete文で削除する。
8
9
  4. テーブルADASHの値をまるまるテーブルAに複写する。
9
10
  5. テーブルADASHを空にする
10
11
 
11
- バルクインサートとは
12
+ ##補足:バルクインサートとは
12
13
  **insert into テーブル名 values(...);**
13
14
 
14
15
  **insert into テーブル名 values(...),(...),n;**
15
16
  という風につなげられる挿入処理(バルクとは船荷のこと)です。船荷のようにまとめて投入できるので、実行処理が一度で済むため、長い行数だと処理は格段に速くなります。
16
17
 
18
+ ###テーブルの複写
17
19
  また、複写の手段ですが
18
20
  ```
19
21
  insert into テーブルA select * from テーブルADASH;
20
22
  ```
21
- という方法があります。全く同じ構造にしておくのがポイントで、この待避テーブルを作成するやり方はけっこう常套手段です。
23
+ という方法があります。全く同じ構造にしておくのがポイントで、この待避テーブルを作成するやり方はけっこうデータ処理の常套手段です。
22
24
 
23
- あと、削除といっても、間違ってもdelete文を使わないでください。泣きを見ます。それから試す前にかならずロールバックできるようにバックアップをとっておてください。
25
+ あと、削除といっても、間違ってもdelete文を使わないでください。泣きを見ます。それから、**試す前にロールバックできるようにバックアップをとっておく**ようにしてください。
24
26
 
25
27
  まあ、更に速い手段でCSVエクスポート&インポートで突っ込むという手もありますが。

3

削除の条件

2020/01/13 06:53

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  1. テーブルAと全く同じテーブルADASHを作る。
6
6
  2. テーブルBから取得したデータをテーブルADASHにバルクインサートで挿入
7
- 3. テーブルAを空にする
7
+ 3. テーブルAを空にする。もし、残したいデータも存在する場合は該当条件のものだけをidなどで紐付け、delete文で削除する。
8
8
  4. テーブルADASHの値をまるまるテーブルAに複写する。
9
9
  5. テーブルADASHを空にする
10
10
 

2

バックアップ

2020/01/13 06:49

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -1,4 +1,4 @@
1
- 元を見ましたがサブクエリを使っているものをupdateするのは非常に時間を要します。それに物量も万行単位なので、待避用のテーブルを作って、そこに一旦作成。その後、元のテーブルを削除してから、移し替えるという手段が速いでしょう。
1
+ 元を見ましたがサブクエリを使っているものをupdateするのは非常に時間を要します。それに物量も万行単位なので、待避用のテーブルを作って、そこに一旦作成。その後、元のテーブル内データを削除(truncate)してから、移し替えるという手段が速いでしょう。
2
2
 
3
3
  調べたらSQLiteでもバルクインサートが使えるようなので。
4
4
 
@@ -20,4 +20,6 @@
20
20
  ```
21
21
  という方法があります。全く同じ構造にしておくのがポイントで、この待避テーブルを作成するやり方はけっこう常套手段です。
22
22
 
23
+ あと、削除といっても、間違ってもdelete文を使わないでください。泣きを見ます。それから試す前にかならずロールバックできるようにバックアップをとっておいてください。
24
+
23
25
  まあ、更に速い手段でCSVエクスポート&インポートで突っ込むという手もありますが。

1

複写について

2020/01/13 06:46

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -9,9 +9,15 @@
9
9
  5. テーブルADASHを空にする
10
10
 
11
11
  バルクインサートとは
12
- insert into テーブル名 values(...);
12
+ **insert into テーブル名 values(...);**
13
+
13
- insert into テーブル名 values(...),(...),n;
14
+ **insert into テーブル名 values(...),(...),n;**
14
- という風につなげられる処理(バルクとは船荷のこと)です。船荷のようにまとめて投入できるので、実行処理が一度で済むため、長い行数だと処理は格段に速くなります。
15
+ という風につなげられる挿入処理(バルクとは船荷のこと)です。船荷のようにまとめて投入できるので、実行処理が一度で済むため、長い行数だと処理は格段に速くなります。
15
16
 
17
+ また、複写の手段ですが
18
+ ```
19
+ insert into テーブルA select * from テーブルADASH;
20
+ ```
21
+ という方法があります。全く同じ構造にしておくのがポイントで、この待避テーブルを作成するやり方はけっこう常套手段です。
16
22
 
17
23
  まあ、更に速い手段でCSVエクスポート&インポートで突っ込むという手もありますが。