数据更新、视图

本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-07-03

一、数据更新

1.插入数据 INSERT … VALUES

语法:

INSERT [INTO] tbl_name [(col_name ,)]
{VALUES|VALUE} ({expr|DEFAULT},...), (...),...;

举例:

-- 插入一行完整的数据
INSERT INTO  mysql_test.customers
VALUES(901, '张三', 'F', '北京', '朝阳区');

-- 或者
--  0代表 id 自动生成 
-- DEFAULT 代表 该值使用默认值
-- NULL 代表 该值为空值,处理暂不确定的值
INSERT INTO mysql_test.customers
VALUES(0,'李四', DEFAULT, '武汉市', NULL);

2.插入数据 INSERT … SET

语法:

INSERT [INTO] tbl_name
SET col_name={ expr|DEFAULT}, ...;

举例:

-- 可以单个值的指定
INSERT INTO mysql_test.customers
SET cust_name = '李四', cust_address = '武汉市', cust_sex = DEFAULT;

3.插入数据 INSERT … SELECT

语法:

INSERT [INTO] tbl_name  [(col_name ,)] 
SELECT ;

举例:复制 apps 表中id为1的数据,app_name, country 到表Websites的 web_name, country 列。

INSERT INTO Websites (web_name, country)
SELECT app_name, country FROM apps WHERE id=1;

4.删除数据 DELETE

语法:

DELETE FROM tbl_name
[WHERE where_condition]
[ORDER BY ]
[LIMIT row_count];

举例:

DELETE FROM mysql_test.customers
WHERE cust_name = '王五';

5.更新数据 UPDATE

语法:

UPDATE tbl_name
SET
col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}] 
[WHERE where_condition]
[ORDER BY ]
[LIMIT row_count]

举例:

UPDATE mysql_test.customers
SET cust_address = '武汉市'
WHERE cust_name = '张三';

UPDATE payroll
SET salary = salary * 1.005
WHERE name = '张三';

二、视图

1.概念

含义:

  • 视图是从一个或多个表或者其他视图中通过查询语句导出的表。
  • 外模式对应到数据库中的概念是视图。
  • 视图是数据库中的一个对象,是数据库管理系统提供给用户的以多种角度观察数据库中数据的一种重要机制。

视图与表的区别:

  • 视图不是真实的表,是一张虚拟表,其结构和数据是建立在数据库中真实表的查询基础上的。
  • 视图的内容是由存储在数据库中进行查询操作的 SQL 语句来定义的,它的列数据与行数据均来自于定义视图的查询所引用的真实表,并且这些数据是在引用视图时动态生成的。
  • 视图不是以数据集的形式存储在数据库中,它对应的数据实际上是存储在视图所引用的真实表中。
  • 视图是用来查看存储在别处的数据的一种虚拟表,而其本身并不存储数据。

视图的优点:

  • 集中分散数据。
  • 简化查询语句。
  • 重用 SQL 语句。
  • 保护数据安全。
  • 共享所需数据。
  • 更改数据格式。

视图用于查询检索的主要应用:

  • 利用视图简化复杂的表连接;
  • 使用视图重新格式化检索出的数据;
  • 使用视图过滤不想要的数据;

2.创建视图 CREATE VIEW

语法:

CREATE VIEW view_name column_list
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION]

语法说明:

  • WITH CHECK OPTION:指定在可更新视图上所进行的修改都需要符合 select_statement 中所指定的限制条件,这样可以确保数据修改后,仍可以通过视图看到修改后的数据。
  • 当视图是根据另一个视图定义时,WITH CHECK OPTION 给出两个参数,CASCADEDLOCAL,它们决定检查测试的范围。CASCADED 为默认值,会对所有视图进行检查;LOCAL 则使 CHECK OPTION只对定义的视图进行检查。

举例:在数据库 mysql_test 中创建视图 customers_view 要求该视图包含客户信息表 customers 中所有男客户信息,并且要求保证今后对该视图数据的修改都必须符合客户性别为男性这个条件。

-- 工作中:CREATE OR REPLACE VIEW customers_view
CREATE VIEW customers_view
AS
SELECT *
FROM customers
WHERE cust_sex = '男'
WITH CHECK OPTION;

3.删除视图 DROP VIEW

语法:

DROP VIEW [IF EXISTS]
view_name[, view_name ] ...
[RESTRICT|CASCADE]

说明:

  • 使用 DROP VIEW 可以一次删除多个视图,但必须在每个视图上 拥有 DROP 权限。
  • RESTRICT 表示删除会影响别的表时不允许删除。
  • CASCADE 表示级联删除。

4.修改视图 ALTER VIEW

语法:

ALTER VIEW view_name[(column_list)]
AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION]

CREATE VIEW 类似,也可以先使用 DROP VIEW 再使用 CREATE VIEW实现。

5.查看视图 SHOW CREATE VIEW

语法:

SHOW CREATE VIEW view_name

6.插入数据到视图 INSERT INTO

INSERT INTO mysql_test.customers_view
VALUES(909,'周明',  'M', '武汉市', '洪山区');

注意:这语句能执行成功,是因为在创建视图时添加了WITH CHECK OPTION 子句。

7.更新视图中的数据 UPDATE

-- 将所有客户的地址更新为上海
UPDATE mysql_test.customers_view
SET cust_address = '上海市';

8.删除视图中的数据 DELETE

DELETE FROM mysql_test.customers_view
WHERE cust_name = '周明';

9.查询视图 SELECT

视图一经定义后,就可以如同插叙数据库中的真实表一样;

SELECT cust_name,cust_address
FROM mysql_test.customers_view
WHERE cust_id = 909

10.注意点

  • 视图的更新操作是受一定限制的,并非所有的视图都可以进行 INSERTUPDATEDELETE 等更新操作,只有满足可更新条件 的视图才能更新。
  • 如果视图所依赖的基本表有多个时,也不能向该视图插入数据。
  • 若一个视图依赖于多个基本表,则一次视图数据修改操作只能改变一个基本表中的数据。
  • 若一个视图依赖于多个基本表,不能使用DELETE语句。