MySQL视图是虚拟表,行和列的数据来自定义视图的查询。视图并不在数据库中实际存储数据,它们只是基于数据库中的表在用户查询时动态生成的结果。
视图的主要作用有:
- 简化复杂的SQL操作,用户可以通过视图简单查询,而不是复杂的表联系查询。
- 安全性,用户只能访问被授权的视图,而不是基础表。
- 数据独立性,一旦视图的结构发生变化,对访问视图的查询语句无影响。
查看视图的语法如下:
CREATE VIEW view_name AS
SELECT ...
FROM ...
更新视图时,需要注意以下限制:
- 只能更新可更新视图,基础表中不能有聚合函数、DISTINCT、GROUP BY、HAVING、UNION等。
- 视图中的所有列必须映射到基础表的列。
- 不能更新视图中的NOT NULL列为NULL。
示例:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(20),
age INT
);
CREATE VIEW user_view AS
SELECT name, age
FROM users;
INSERT INTO user_view (name, age)
VALUES ('Mark', 25);
UPDATE user_view
SET age = 30
WHERE name = 'Mark';
上面我们创建了一个user_view视图,插入和更新都作用于该视图,但实际上数据是插入和更新到基础表users中的。