发布时间:2024-04-06 18:30:01
视图(View)是一个由 SELECT 查询所定义出来的虚拟表。注意,用户必须拥有足够的权限才能创建视图。
SQL 使用 CREATE VIEW 语句用来创建视图,基本的语法格式如下:
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT id, name, age FROM CUSTOMERS WHERE SALARY > 2000;
SQL > SELECT * FROM CUSTOMERS_VIEW;执行结果:
+----+----------+-----+ | id | name | age | +----+----------+-----+ | 4 | Chaitali | 25 | | 5 | Hardik | 27 | | 6 | Komal | 22 | | 7 | Muffy | 24 | +----+----------+-----+
WITH CHECK OPTION
子句。SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT id, name, age, address, salary FROM CUSTOMERS WHERE SALARY > 2000 WITH CHECK OPTION;执行完该语句,视图内容如下:
+----+----------+-----+---------+--------+ | id | name | age | address | salary | +----+----------+-----+---------+--------+ | 4 | Chaitali | 25 | Mumbai | 6500 | | 5 | Hardik | 27 | Bhopal | 8500 | | 6 | Komal | 22 | MP | 4500 | | 7 | Muffy | 24 | Indore | 10000 | +----+----------+-----+---------+--------+
INSERT INTO CUSTOMERS_VIEW (name, age, address, salary) VALUES ('Tom', 30, 'MP', 3300.00 );该语句可以执行成功,在视图中也可以看到插入的数据。
INSERT INTO CUSTOMERS_VIEW (name, age, address, salary) VALUES ('Abel', 30, 'MP', 1800.00 );该语句将执行失败,数据库引擎将给出错误提示,类似于:
CHECK OPTION failed 'test.CUSTOMERS_VIEW'
SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT id, name, age, salary FROM CUSTOMERS WHERE SALARY > 2000 WITH CHECK OPTION;相比于基础表,视图没有选取 address 字段,这意味着通过视图插入数据时也无法为 address 字段赋值,此时如果基础表中的 address 字段没有默认值,那么将无法插入数据。例如:
INSERT INTO CUSTOMERS_VIEW (name, age, salary) VALUES ('Abel', 30, 2800.00 );该语句将执行失败,数据库引擎给出错误提示,类似于:
Field of view 'test.CUSTOMERS_VIEW' underlying table doesn't have a default value
对于视图的插入,最终是对于基础表的插入,如果基础表不接受插入的数据,那么该数据在视图中也不能插入成功。DROP VIEW view_name;
view_name 为视图的名字。DROP VIEW CUSTOMERS_VIEW;