ホームページ  >  記事  >  データベース  >  MySQL のビューと操作の概要 (コード付き)

MySQL のビューと操作の概要 (コード付き)

不言
不言転載
2019-04-15 11:26:473179ブラウズ

この記事は、MySQL ビューの導入と操作 (コード付き) を紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

1. 準備

MySQL データベースに、balance (残高テーブル) と customer (顧客テーブル) の 2 つのテーブルを作成し、データを挿入します。

create table customer(
    id int(10) primary key,
    name char(20) not null,
    role char(20) not null,
    phone char(20) not null,
    sex char(10) not null,
    address char(50) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#外键为customerId
create table balance(
    id int(10) primary key,
    customerId int(10) not null,
    balance DECIMAL(10,2),
    foreign key(customerId) references customer(id) 

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

顧客テーブルと残高テーブルにデータを 3 つずつ挿入します。

insert into customer values(0001,"xiaoming",'vip1','12566666','male','江宁区888号');
insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建邺区888号');
insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888号');

insert into balance values(1,0001,900.55);
insert into balance values(2,0002,900.55);
insert into balance values(3,0003,10000);

2. ビューの概要

ビューは、単に仮想テーブルとして理解できます。データベース内の実際のデータ テーブルとは異なります。ビュー内のデータは、以下に基づいて取得されます。実際のテーブルのクエリ。ビューは実際のテーブルと同様の構造を持っています。ビューは、実際のテーブルの更新、クエリ、削除などの操作もサポートします。では、なぜビューが必要なのでしょうか?

a. 実テーブルのセキュリティの向上: ビューは仮想であり、実テーブルの権限を付与せずにユーザーにビューの権限のみを付与できます。これは、実テーブルを保護する役割を果たします。テーブル。
b. データのカスタマイズされた表示: 同じ実際のテーブルに基づいて、データをカスタマイズして、さまざまなビューを通じてさまざまなニーズを持つユーザーにデータを表示できます。
c. データ操作の簡素化: クエリ ステートメントが複雑で頻繁に使用されるシナリオに適しており、ビューを通じて実装できます。
......

ビュー関連の操作には、ユーザーが対応する権限を持っている必要があることに注意してください。以下の操作はrootユーザーで行い、デフォルトユーザーが操作権限を持っています。

ビュー構文の作成

create view <视图名称>  as <select语句>;

ビュー構文の変更

ビュー名を変更するには、まずビューを削除してから、同じステートメントで作成します。

#更新视图结构
alter view <视图名称>  as <select语句>;
#更新视图数据相当于更新实际表,不适用基于多表创建的视图
update ....

注: 一部のビューのデータは更新できません。つまり、update、insert、および次のような他のステートメントを使用して更新できません。

a、select ステートメントには複数のテーブルが含まれています
b, view には、having 句
c が含まれており、ビューには個別のキーワードが含まれています
...

ビューの構文の削除

drop view <视图名称>

3. ビューの操作

単一のテーブルに基づいてビューを作成します

mysql> create view  bal_view 
    -> as
    -> select * from  balance;
Query OK, 0 rows affected (0.22 sec)

作成が完了したら、bal_view の構造とレコードを表示します。ビューを介してデータをクエリすることによって得られる結果は、実際のテーブルを介してクエリを実行する場合とまったく同じであることがわかります。

#查询bal_view的结构
mysql> desc bal_view;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| id         | int(10)       | NO   |     | NULL    |       |
| customerId | int(10)       | NO   |     | NULL    |       |
| balance    | decimal(10,2) | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
3 rows in set (0.07 sec)
#查询bal_view中的记录
mysql> select  * from bal_view;
+----+------------+----------+
| id | customerId | balance  |
+----+------------+----------+
|  1 |          1 |   900.55 |
|  2 |          2 |   900.55 |
|  3 |          3 | 10000.00 |
+----+------------+----------+
3 rows in set (0.01 sec)

ビューの作成ステートメントから結論を引き出すのは難しくありません。実際のテーブル内のデータが変更されると、それに応じてビュー内のデータも変更されます。では、ビュー内のデータが変更されると、実際のテーブル内のデータも変更されるのでしょうか? id=1~2000の顧客の残高を変更して実験してみましょう。

mysql> update bal_view set balance=2000 where id=1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

実際のテーブル残高のデータを見てみましょう。

mysql> select  * from bal_view where id=1;
+----+------------+---------+
| id | customerId | balance |
+----+------------+---------+
|  1 |          1 | 2000.00 |
+----+------------+---------+
1 row in set (0.03 sec)

結論: ビュー表のデータが変更されると、それに応じて実際の表のデータも変更されます。

複数のテーブルに基づくビューの作成

顧客名と残高の 2 つのフィールドを持つビュー cus_bal を作成します。

mysql> create view cus_bal
    -> (cname,bal)
    -> as
    -> select customer.name,balance.balance from customer ,balance
    -> where customer.id=balance.customerId;
Query OK, 0 rows affected (0.05 sec)
#查看cus_bal中的数据
mysql> select *  from  cus_bal;
+----------+----------+
| cname    | bal      |
+----------+----------+
| xiaoming |  2000.00 |
| xiaohong |   900.55 |
| xiaocui  | 10000.00 |
+----------+----------+
3 rows in set (0.28 sec)

ビューの変更

cus_bal ビューの cname を cusname に変更します。

mysql> alter view  cus_bal
    -> (cusname,bal)
    -> as
    -> select customer.name,balance.balance from customer ,balance
    -> where customer.id=balance.customerId;
Query OK, 0 rows affected (0.06 sec)
#查看修改后视图结构。
mysql> desc  cus_bal;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| cusname | char(20)      | NO   |     | NULL    |       |
| bal     | decimal(10,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

複数のテーブルに基づいて作成されたビューの変更

mysql> insert into cus_bal(cusname,bal) values ("ee",11);
ERROR 1393 (HY000): Can not modify more than one base table through a join view &#39;rms.cus_bal&#39;

ビューの削除

ビューの削除 cus_bal

drop view cus_bal;
mysql> drop view cus_bal;
Query OK, 0 rows affected (0.00 sec)

[関連する推奨事項: MySQL チュートリアル]

以上がMySQL のビューと操作の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。