MySQL view視圖簡單介紹



  view視圖,視圖是什麼?視圖就是一個虛擬的表,定義我們所想要看到的一個view,純屬個人理解~


1、創建一個view數據庫

mysql> CREATE DATABASE view;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+----------------------+
| Database             |
+----------------------+
| information_schema   |
| mysql                |
| performance_schema   |
| test                 |
| view                 |
+----------------------+
11 rows in set (0.00 sec)

2、進入view庫並創建我們定義的view表

mysql> USE view                                        #進入view庫
Database changed
mysql> CREATE VIEW user_info AS                        #創建user_info view的表
    -> SELECT user,password,host FROM mysql.user;      #定義只從mysql.user取出user,password,host
Query OK, 0 rows affected (0.00 sec)

3、查看是否是我們所想定義的那樣

mysql> SHOW TABLES;                                    #查看錶是否創建成功
+----------------+
| Tables_in_view |
+----------------+
| user_info      |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM user_info;                        #如我們所想定義的那樣
+------+-------------------------------------------+-----------+
| user | password                                  | host      |
+------+-------------------------------------------+-----------+
| root |                                           | localhost |
| root |                                           | jroa      |
| root |                                           | 127.0.0.1 |
| root |                                           | ::1       |
|      |                                           | localhost |
|      |                                           | jroa      |
| oa   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 127.0.0.1 |
+------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)

再通過一個例子來擴展下!~~

1、創建兩張正常表,分別爲表a 及 表b ~好像哪裏乖乖的^-^

mysql> CREATE TABLE a (                             #創建表a
    -> id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
    -> name VARCHAR(60) NOT NULL,
    -> price DOUBLE NOT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE b(                              #創建表b
    -> id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
    -> name VARCHAR(60) NOT NULL,
    -> qty INT NOT NULL,
    -> gen_time DATETIME NOT NULL
    -> );
Query OK, 0 rows affected (0.04 sec)

2、爲倆張表造點數據

mysql> DESC a;                                #查看錶a結構
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(60)      | NO   |     | NULL    |                |
| price | double           | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> DESC b;                                #查看錶b結構
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name     | varchar(60)      | NO   |     | NULL    |                |
| qty      | int(11)          | NO   |     | NULL    |                |
| gen_time | datetime         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

mysql> INSERT INTO a (name,price) VALUES        #插入數據
    -> ('apple',3.5),
    -> ('pear',3.2),
    -> ('banana',4.5),
    -> ('oracle',5.5);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> INSERT INTO b (name,qty,gen_time) VALUES  #插入數據
    -> ('apple',5,now()),
    -> ('banana',7,now());
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

3、定義我們的view表

mysql> CREATE VIEW deail AS                      #創建view表,表名爲deail
    -> SELECT a.name AS Name,                    #定義字段名稱映射
    -> a.price AS Price,                         #定義字段名稱映射
    -> b.qty AS Qty,                             #定義字段名稱映射
    -> a.price * b.qty AS Total                  #定義a字段乘以b字段的結果映射
    -> FROM a,b WHERE a.name=b.name;             #從表a 及 表b讀取,並且條件爲表倆邊那麼相等
Query OK, 0 rows affected (0.00 sec)


4、驗證是否是我們所想的那樣

mysql> SELECT * FROM deail;                      #果真如我們想的那樣
+--------+-------+-----+-------+
| Name   | Price | Qty | Total |
+--------+-------+-----+-------+
| apple  |   3.5 |   5 |  17.5 |
| banana |   4.5 |   7 |  31.5 |
+--------+-------+-----+-------+
2 rows in set (0.00 sec)

5、再插入倆條數據進行佐證

mysql> INSERT INTO a (name,price) VALUES         #插入倆條數據,好像又是怪怪的^-^
    -> ('XX',4.8),
    -> ('OO',5.7);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> INSERT INTO b (name,qty,gen_time) VALUES    #這裏同樣插入倆條數據,好像也是怪怪的
    -> ('XX',7,now()),
    -> ('OO',6,now());
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM deail;                        #驗證結果
+--------+-------+-----+-------+
| Name   | Price | Qty | Total |
+--------+-------+-----+-------+
| apple  |   3.5 |   5 |  17.5 |
| banana |   4.5 |   7 |  31.5 |
| XX     |   4.8 |   7 |  33.6 |
| OO     |   5.7 |   6 |  34.2 |
+--------+-------+-----+-------+
4 rows in set (0.00 sec)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章