MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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文で定義されたビューであることを確認しておくと安心です。

  1. 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)

  2. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),