Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tạo và sử dụng chế độ xem MySQL

MySQL View là gì?

Dạng xem MySQL chỉ đơn giản là một đối tượng cơ sở dữ liệu thông thường có thể tiết kiệm rất nhiều thời gian cho người viết truy vấn SQL khi được sử dụng đúng cách. Dạng xem là một truy vấn được lưu trữ mà người dùng có thể tham chiếu giống như một bảng. Nhiều khi người dùng sẽ thấy mình sử dụng lặp đi lặp lại cùng một truy vấn cơ sở để giải quyết nhiều vấn đề. Chế độ xem là một cách nhanh chóng lưu truy vấn đó và tham chiếu nó sau này.

Ưu điểm của việc sử dụng chế độ xem là gì?

Chế độ xem có một số lợi thế. Đầu tiên, các khung nhìn xuất hiện cho người dùng MySQL giống như một bảng. Mệnh đề SELECT có thể tham chiếu một dạng xem chính xác giống như nó đối với một bảng. Một ưu điểm khác là khi các bảng bên dưới được tham chiếu bởi một chế độ xem thay đổi, kết quả của chế độ xem cũng thay đổi. Ưu điểm thứ ba là một chế độ xem chiếm rất ít dung lượng trên máy chủ. Kết quả SQL của chế độ xem được tính toán mỗi khi nó được truy cập, vì vậy chúng không được lưu trữ trên máy chủ cho đến khi chúng được truy cập.

Các bảng cho Bài tập này

Đối với bài viết này, một cơ sở dữ liệu sẽ được tạo chứa thông tin về một mùa giải đua ô tô giả tưởng có ba tay đua, bốn đường đua và một cuộc đua trên mỗi đường đua. Trong cơ sở dữ liệu này, có bốn bảng.

  • Trình điều khiển
  • Bản nhạc
  • Các cuộc đua
  • Kết thúc

Cấu trúc của các bảng như được trình bày bên dưới.

create table drivers
(
  id int auto_increment,
  name varchar(64) not null,
  car_number int not null,
  constraint drivers_pk
     primary key (id)
);
create table tracks
(
  id int auto_increment,
  name varchar(64) not null,
  location varchar(64) not null,
  constraint track_pk
     primary key (id)
);
create table races
(
  id int auto_increment,
  name varchar(64) not null,
  track int not null,
  distance int not null,
  constraint races_pk
     primary key (id)
);


create table finishes
(
  id int auto_increment,
  driver int not null,
  race int not null,
  position int not null,
  constraint finishes_pk
     primary key (id)
);

Trình điều khiển

Bây giờ, trong bước tiếp theo, chúng ta sẽ chèn ba tài xế và số xe của họ vào một bảng.

  • Buddy Baker 28
  • Dale Earnhardt Jr. 8
  • Ricky Rudd 88
insert into drivers (name,car_number) values
  ('Buddy Baker',28),
  ('Dale Earnhardt Jr.',8),
  ('Ricky Rudd',88);

Kết quả của chúng tôi bây giờ sẽ hiển thị kết quả sau.

ID Tên Số xe
1 Buddy Baker 28
2 Dale Earnhardt Jr. 8
3 Ricky Rudd 88

Đường đua

Tiếp theo, chúng tôi thêm bốn đường đua và vị trí của chúng.

  • Talladega Superspeedway - Lincoln, AL
  • Đường cao tốc Quốc tế Daytona - Bãi biển Daytona, FL
  • Đường cao tốc Indianapolis - Đường cao tốc, IN
  • Đường cao tốc quốc tế Michigan - Brooklyn, MI
insert into tracks (name,location) values
  ('Talladega Superspeedway','Lincoln, AL'),
  ('Daytona International Speedway','Daytona Beach, FL'),
  ('Indianapolis Motor Speedway','Speedway, IN'),
  ('Michigan International Speedway','Brooklyn, MI');

Kết quả của chúng tôi bây giờ sẽ hiển thị kết quả sau.

ID Tên Vị trí
1 Talladega Superspeedway Lincoln, AL
2 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL
3 Đường cao tốc Indianapolis Motor Speed ​​ Đường cao tốc, IN
4 Đường cao tốc Quốc tế Michigan Brooklyn, MI

Chủng tộc

Bây giờ, bốn cuộc đua, cùng với khoảng cách cho mỗi cuộc, được tham gia.

  • Daytona 500, 2.500
  • Talladega 500,1.500
  • Xưởng gạch 400,3, 400
  • Michigan 400, 4, 400
insert into races (name,track,distance) values
  ('Daytona 500',2,500),
  ('Talladega 500',1,500),
  ('Brickyard 400',3,400),
  ('Michigan 400',4,'400');

Kết quả của chúng tôi bây giờ sẽ hiển thị kết quả sau.

ID Tên Theo dõi Khoảng cách
1 Talladega 500 2 500
2 Daytona 500 1 500
3 Brickyard 400 3 400
4 Michigan 400 4 400

Kết quả

Cuối cùng, các bảng cho đầu mùa giải hiện đã được tạo.

Trong cuộc đua đầu tiên tại Daytona 500:

  • Ricky Rudd về đích đầu tiên
  • Dale Earnhardt Jr về nhì
  • Buddy Baker về thứ ba.
insert into finishes (driver, race, position) values
  (1,1,3),
  (2,1,2),
  (3,1,1);

Dữ liệu được tổng hợp

Đầu vào dữ liệu đầu tiên

Bây giờ có dữ liệu thực tế để truy vấn. Nếu chúng tôi chạy một truy vấn để xem tất cả các kết quả của trình điều khiển với các bài hát và cuộc đua tương ứng của họ, thì sẽ hơi phức tạp vì có một số kết hợp.

select d.name as driver,
     r.name as race,
     t.name as track,
     t.location as location,
     f.position as position
  from finishes f
  left join races r
     on f.race = r.id
  left join tracks t
     on r.track = t.id
  left join drivers d
     on d.id = f.driver;

Kết quả của chúng tôi bây giờ cho thấy kết quả sau.

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Buddy Baker Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 2
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1

Đầu vào dữ liệu thứ hai

Khi cuộc đua thứ hai, Talladega 500, dữ liệu được thêm vào, truy vấn có thể được viết lại, giống như truy vấn trước đó. Trong cuộc đua này, Dale Earnhardt về nhất và Buddy Baker về nhì.

insert into finishes (driver, race, position) values
  (1,2,2),
  (2,2,1),
  (3,2,3);

Kết quả của truy vấn trên sẽ như thế này.

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Buddy Baker Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 2
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Buddy Baker Talladega 500 Talladega Superspeedway Lincoln, AL 2
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Ricky Rudd Talladega 500 Talladega Superspeedway Lincoln, AL 3

Tạo chế độ xem

Bây giờ có nhiều cuộc đua trong cơ sở dữ liệu, có những cách mới để xem xét kết quả. Các truy vấn có thể được viết cho “ Kết thúc tốt nhất ”Và“ Thắng nhiều nhất . ” Tất cả các truy vấn này sẽ bắt đầu với cùng một dữ liệu cơ bản về những gì các tay đua đã hoàn thành ở mỗi vị trí của cuộc đua. Để đơn giản hóa quá trình phát triển các truy vấn này, một chế độ xem có thể được tạo với mệnh đề “tạo hoặc thay thế chế độ xem dưới dạng”. Theo sau mệnh đề này là SQL sẽ được lưu. Trong trường hợp này, nó được thêm vào trước truy vấn trước đó mà chúng tôi đã hiển thị ở trên.

create or replace view all_finishes as
select d.name as driver,
     r.name as race,
     t.name as track,
     t.location as location,
     f.position as position
  from finishes f
  left join races r
     on f.race = r.id
  left join tracks t
     on r.track = t.id
  left join drivers d
     on d.id = f.driver;

Kết quả là một tính năng mạnh mẽ của SQL. Kết quả này bây giờ trông giống như một bảng nhưng sẽ thay đổi khi thông tin mới được thêm vào bất kỳ bảng bên dưới nào. Hãy chạy truy vấn này.

select * from all_finishes;
Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Buddy Baker Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 2
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Buddy Baker Talladega 500 Talladega Superspeedway Lincoln, AL 2
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Ricky Rudd Talladega 500 Talladega Superspeedway Lincoln, AL 3

Kết quả giống với lần cuối cùng chúng tôi chạy truy vấn này:

Sự khác biệt là bây giờ chế độ xem có thể được truy vấn như một bảng. Một truy vấn hiển thị những người chiến thắng trong mỗi cuộc đua.

select * from all_finishes where position = 1;

Truy vấn cung cấp những kết quả này.

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Một truy vấn cũng có thể được viết để hiển thị người dẫn đầu dựa trên kết quả trung bình.

select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

Điều đó cho thấy Dale Earnhardt dẫn đầu cho đến nay trong mùa giải:

Kết thúc Trình điều khiển
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2,5 Buddy Baker

Bởi vì các chế độ xem có thể tham chiếu các chế độ xem khác, các chế độ xem mở rộng hơn có thể được tạo bằng các truy vấn này.

create view standings_leader as
select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

Kết quả của truy vấn trên sẽ như thế này.

Kết thúc Trình điều khiển
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2,5 Buddy Baker

Cũng như:

create view race_winners as
select * from all_finishes where position = 1;

Điều nào cung cấp cho chúng tôi kết quả tương tự.

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Thêm dữ liệu

Phần quan trọng nhất của lượt xem là khi chúng tôi thêm nhiều dữ liệu như cuộc đua này kết thúc khi Buddy Baker thắng Brickyard 400 và Michigan 400, chúng tôi có thể chỉ cần truy vấn các lượt xem của mình để nhận được kết quả tương tự.

insert into finishes (driver, race, position) values
  (1,3,1),
  (2,3,3),
  (3,3,2);

insert into finishes (driver, race, position) values
  (1,4,1),
  (2,4,2),
  (3,4,3);

Bây giờ chúng ta có thể thấy tất cả các kết thúc với truy vấn này.

select * from all_finishes;\

Kết quả của truy vấn trên sẽ như thế này.

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Buddy Baker Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 2
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Buddy Baker Talladega 500 Talladega Superspeedway Lincoln, AL 2
Dale Earnhardt Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Ricky Rudd Talladega 500 Talladega Superspeedway Lincoln, AL 3
Buddy Baker Brickyard 400 Đường cao tốc Indianapolis Motor Speed ​​ Đường cao tốc, IN 1
Dale Earnhardt Jr. Brickyard 400 Đường cao tốc Indianapolis Motor Speed ​​ Đường cao tốc, IN 3
Ricky Rudd Brickyard 400 Đường cao tốc Indianapolis Motor Speed ​​ Đường cao tốc, IN 2
Buddy Baker Michigan 400 Đường cao tốc Quốc tế Michigan Brooklyn, MI 1
Dale Earnhardt Jr. Michigan 400 Đường cao tốc Quốc tế Michigan Brooklyn, MI 2
Ricky Rudd Michigan 400 Đường cao tốc Quốc tế Michigan Brooklyn, MI 3

Chúng tôi cũng có thể chạy:

select * from race_winners;

Điều này mang lại cho chúng tôi:

Trình điều khiển Cuộc đua Theo dõi Vị trí Vị trí
Ricky Rudd Daytona 500 Đường cao tốc Quốc tế Daytona Bãi biển Daytona, FL 1
Dale Earnhardt Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Buddy Baker Brickyard 400 Đường cao tốc Indianapolis Motor Speed ​​ Đường cao tốc, IN 1
Buddy Baker Michigan 400 Đường cao tốc Quốc tế Michigan Brooklyn, MI 1

Ngoài ra, kết quả là nhà vô địch loạt:

select * from standings_leader;

Kết quả là:

Kết thúc Trình điều khiển
2 Buddy Baker
2 Dale Earnhardt, Jr.
2 Ricky Rudd

Kết luận

Khi chúng ta lưu một truy vấn trong máy chủ cơ sở dữ liệu của mình (cụ thể hơn là trong danh mục cơ sở dữ liệu) và đặt tên cho nó, truy vấn mới được đặt tên này được gọi là dạng xem cơ sở dữ liệu hay đơn giản hơn là dạng xem. MySQL Views là một cách mạnh mẽ để lưu các truy vấn quan trọng và có thể tái sử dụng có thể giúp chúng tôi tăng tốc độ truy xuất thông tin quan trọng. Vì các chế độ xem lưu này có thể tham chiếu đến các chế độ xem khác, nên các chế độ xem chi tiết hơn có thể được tạo bằng các truy vấn quan trọng này.

Đánh giá chúng tôi!

Chúng tôi tự hào vì đã trở thành Những con người hữu ích nhất trong Hosting ™!

Nhóm hỗ trợ của chúng tôi bao gồm các kỹ thuật viên Linux giàu kinh nghiệm và quản trị viên hệ thống tài năng, những người có kiến ​​thức sâu rộng về nhiều công nghệ lưu trữ web, đặc biệt là những công nghệ được thảo luận trong bài viết này.

Nếu bạn có bất kỳ câu hỏi nào liên quan đến thông tin này, chúng tôi luôn sẵn sàng giải đáp mọi thắc mắc về các vấn đề liên quan đến bài viết này, 24 giờ một ngày, 7 ngày một tuần 365 ngày một năm.

Nếu bạn là máy chủ VPS được Quản lý Hoàn toàn, Đám mây Chuyên dụng, Đám mây Riêng của VMWare, Máy chủ Riêng của Mẹ, Máy chủ Đám mây Được Quản lý hoặc Chủ sở hữu Máy chủ Chuyên dụng và bạn không thoải mái khi thực hiện bất kỳ bước nào đã nêu, chúng tôi có thể được liên hệ qua điện thoại @ 800.580.4985, một phiếu trò chuyện hoặc hỗ trợ để hỗ trợ bạn trong quá trình này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đối chiếu thay đổi MySQL của tất cả các bảng

  2. Tìm kiếm chuỗi trong cột văn bản trong MySQL

  3. Cách tạo cài đặt MySQL để thử nghiệm cục bộ

  4. HAProxy:Tất cả các tài nguyên của Somenines

  5. Câu lệnh chuẩn bị sẵn trong PHP PDO - Truy vấn LIKE trong MySQL