【MySQL】ビューから行を削除するとベーステーブルからも削除される?実例付きで徹底解説
結論:ビューからの削除はベーステーブルにも反映される
結論から言うと、はい。ビューから行を削除すると、その変更は元となるベーステーブルにも反映され、該当する行が削除されます。ビューは実体を持たない仮想的なテーブルであり、ビューに対する操作は基本的に基礎となるテーブルに直接作用するためです。
ここからは、実際にテーブルとビューを作成しながら、その動作を順番に確認していきましょう。
ステップ1:サンプルテーブルを作成する
まず、以下のクエリでテーブルを作成します。
mysql> create table deleteFromBaseTableDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.83 sec)
ステップ2:レコードを挿入する
INSERTコマンドを使って、サンプルデータを数件登録します。
mysql> insert into deleteFromBaseTableDemo(Name) values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into deleteFromBaseTableDemo(Name) values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> insert into deleteFromBaseTableDemo(Name) values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into deleteFromBaseTableDemo(Name) values('Sam');
Query OK, 1 row affected (0.14 sec)ステップ3:テーブルの内容を確認する
SELECT文ですべてのレコードを表示します。
mysql> select *from deleteFromBaseTableDemo;
出力結果は次の通りです。
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | | 4 | Sam | +----+-------+ 4 rows in set (0.00 sec)
ステップ4:ビューを作成する
続いて、このテーブルをもとにビューを作成します。
mysql> create view delete_view as select Id,Name from deleteFromBaseTableDemo; Query OK, 0 rows affected (0.17 sec)
ステップ5:ビューの内容を確認する
作成したビューのレコードを確認してみましょう。
mysql> select *from delete_view;
出力結果:
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | | 4 | Sam | +----+-------+ 4 rows in set (0.05 sec)
ステップ6:ビューから行を削除する
それでは、ビューに対してDELETE文を実行します。ここではId=4(Sam)の行を削除対象とします。
mysql> delete from delete_view where Id=4; Query OK, 1 row affected (0.26 sec)
ステップ7:ビューとベーステーブルの両方を確認する
まず、削除後のビューの内容を確認します。
mysql> select *from delete_view;
出力結果:
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +----+-------+ 3 rows in set (0.00 sec)
続いて、ベーステーブル側も確認してみます。
mysql> select *from deleteFromBaseTableDemo;
出力結果:
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +----+-------+ 3 rows in set (0.00 sec)
まとめ
両方の出力結果を見比べると、Id=4の行がビューだけでなく、元のベーステーブルからも削除されていることがわかります。これは、通常のビューがベーステーブルへの「窓」のような役割を持ち、ビューに対するINSERT・UPDATE・DELETEといったDML操作が基礎となるテーブルにそのまま適用されるためです。
なお、SUMやCOUNTなどの集計関数、GROUP BY、DISTINCTなどを使用した複雑な定義のビューでは、更新や削除の操作が行えない場合があります。ビュー経由でのデータ操作を行う場合は、シンプルなSELECT文で定義されたビューであることを確認しておくと安心です。
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)
-
MySQLでテーブルから特定の行を抽出するクエリの書き方
MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),