Heim  >  Artikel  >  Datenbank  >  Einführung in MySQL-Ansichten und -Operationen (mit Code)

Einführung in MySQL-Ansichten und -Operationen (mit Code)

不言
不言nach vorne
2019-04-15 11:26:473169Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Einführung und den Betrieb von MySQL-Ansichten (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.

1. Vorbereitung

Erstellen Sie zwei Tabellen Saldo (Saldentabelle) und Kunde (Kundentabelle) in der MySQL-Datenbank und fügen Sie Daten ein.

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;

Fügen Sie jeweils 3 Daten in die Kundentabelle und die Saldentabelle ein.

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. Einführung in Ansichten

Eine Ansicht kann einfach als virtuelle Tabelle verstanden werden. Sie unterscheidet sich von der realen Datentabelle in der Datenbank die Abfrage der realen Tabelle. Ansichten haben eine ähnliche Struktur wie echte Tabellen. Ansichten unterstützen auch Vorgänge wie das Aktualisieren, Abfragen und Löschen realer Tabellen. Warum brauchen wir also Ansichten?

a. Verbessern Sie die Sicherheit der realen Tabelle: Die Ansicht ist virtuell, und Sie können dem Benutzer nur die Berechtigungen der Ansicht erteilen, ohne die Berechtigungen der realen Tabelle zu erteilen, was eine Rolle beim Schutz der realen Tabelle spielt Tisch.
b. Angepasste Anzeige von Daten: Basierend auf derselben tatsächlichen Tabelle können Daten angepasst werden, um Daten für Benutzer mit unterschiedlichen Anforderungen in verschiedenen Ansichten anzuzeigen.
c. Vereinfachte Datenoperationen: Es eignet sich für Szenarien, in denen Abfrageanweisungen komplex sind und häufig verwendet werden, und kann über Ansichten implementiert werden.
......

Es ist zu beachten, dass für ansichtsbezogene Vorgänge entsprechende Berechtigungen des Benutzers erforderlich sind. Für die folgenden Vorgänge wird der Root-Benutzer verwendet, und der Standardbenutzer verfügt über Betriebsberechtigungen.

Ansichtssyntax erstellen

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

Ansichtssyntax ändern

Um den Ansichtsnamen zu ändern, können Sie ihn zuerst löschen und dann mit derselben Anweisung erstellen.

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

Hinweis: Die Daten einiger Ansichten können nicht aktualisiert werden, das heißt, sie können nicht mit update, insert und anderen Anweisungen aktualisiert werden, wie zum Beispiel:

a Die select-Anweisung enthält mehrere Tabellen
b. Ansicht enthält die Klausel „withing“
c
Erstellen Sie eine Ansicht basierend auf einer einzelnen Tabelle

drop view <视图名称>

Nachdem die Erstellung abgeschlossen ist, sehen Sie sich die Struktur und die Datensätze von bal_view an. Es kann festgestellt werden, dass die Ergebnisse, die durch die Abfrage von Daten über die Ansicht erzielt werden, genau die gleichen sind wie die Abfrage über die reale Tabelle.

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

Es ist nicht schwer, aus der Aussage zum Erstellen der Ansicht die Schlussfolgerung zu ziehen: Wenn sich die Daten in der realen Tabelle ändern, ändern sich auch die Daten in der Ansicht entsprechend. Wenn sich also die Daten in der Ansicht ändern, ändern sich dann auch die Daten in der realen Tabelle? Lassen Sie uns experimentieren und den Kontostand des Kunden mit der ID=1 auf 2000 ändern.

#查询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)

Werfen wir einen Blick auf die Daten in der realen Tabellenbilanz.

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

Fazit: Wenn sich die Daten in der Ansichtstabelle ändern, ändern sich auch die Daten in der realen Tabelle.

Erstellen Sie eine Ansicht basierend auf mehreren Tabellen

Erstellen Sie eine Ansicht „cus_bal“ mit zwei Feldern: Kundenname und Kontostand.

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

Ansicht ändern

Ändern Sie den C-Namen in der Ansicht „cus_bal“ in „cusname“.

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)

Ansichten ändern, die auf der Grundlage mehrerer Tabellen erstellt wurden

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)

Ansicht löschen

Ansicht cus_bal löschen

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;

[Verwandte Empfehlungen:

MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonEinführung in MySQL-Ansichten und -Operationen (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen