>  기사  >  데이터 베이스  >  MySQL 보기 및 작업 소개(코드 포함)

MySQL 보기 및 작업 소개(코드 포함)

不言
不言앞으로
2019-04-15 11:26:473117검색

이 기사는 MySQL 뷰(코드 포함)의 소개 및 작동에 대한 소개를 제공합니다. 이는 특정 참조 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 준비

MySQL 데이터베이스에 Balance(잔액 테이블)와 Customer(고객 테이블) 두 개의 테이블을 생성하고 데이터를 삽입합니다.

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. 단순화된 데이터 작업: 쿼리 문이 복잡하고 자주 사용되는 시나리오에 적합하며 뷰를 통해 구현할 수 있습니다.
......

한 가지 주의할 점은 보기 관련 작업을 수행하려면 사용자에게 해당 권한이 있어야 한다는 것입니다. 다음 작업은 루트 사용자를 사용하며 기본 사용자에게는 작업 권한이 있습니다.

뷰 구문 생성

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

뷰 구문 수정

뷰 이름을 수정하려면 먼저 삭제한 후 동일한 문으로 생성하면 됩니다.

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

참고: 일부 뷰의 데이터는 업데이트할 수 없습니다. 즉, 다음과 같은 업데이트, 삽입 및 기타 문을 사용하여 업데이트할 수 없습니다.

a, select 문에는 여러 테이블이 포함되어 있습니다.
b, 뷰에는 다음이 포함됩니다. 절
c, try 고유 키워드 포함
...

뷰 삭제 구문

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)

결론: 뷰 테이블의 데이터가 변경되면 실제 테이블의 데이터도 변경됩니다.

여러 테이블을 기반으로 뷰 만들기

고객 이름과 잔액이라는 두 개의 필드가 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제