SQLite 虚拟表和触发器操作联结表 | 学习笔记

简介: 快速学习 SQLite 虚拟表和触发器操作联结表

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 虚拟表和触发器操作联结表】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11233


SQLite 虚拟表和触发器操作联结表

内容介绍:

一、视图(虚拟的表)

二、触发器

 

一、视图(虚拟的表)

注意:虚拟表在严格意义上不能说是一种表,它是提供了一种查看表的方法。

举例:sqlite> select info.id,info.name, info.addr , score from info,class where info.id=class.id;

id     name    addr    score

----   --------  -------  ------  

101     zs      bj       40

102     ls       tj       40

103     ww     sh      60

104     zs       cd     60

105     sw      cq      90

106      xh      hb     90

107

发现上述写的查看代码非常长,如果觉得太过复杂,可以在 select 代码前面加上create view result(表名)as,result 就是一个虚拟的表,显示的是一串联结表的信息。

如果要再查看联结表信息,可以:

sqlite> select * from result;

id     name    addr    score

----   --------  -------  ------  

101     zs      bj       40

102     ls       tj       40

103     ww     sh      60

104     zs       cd     60

105     sw      cq      90

106      xh      hb     90

107

以上方法只适合进行查看,不能进行修改。

创建视图: 视图不包含数据,因此在每次使用视图时,实际上都必须执行查询语句,从返回结果信息中再检索视图与表一样,必须唯一命名(通过 .tables 和 .schema 查看)

语法 :create view 视图名 as 语句;

创建视图后,视图名可以作为一个表来使用

更改视图后,视图重新检索出的数据排序

删除视图: 语法: drop view 视图名;

总结:

1、视图不包含数据,因此在每次使用视图时,实际上都必须执行查询语句

2、视图相当于创建视图的时候as后面SQL语句查询得到的结果集合。

3、从返回结果信息(视图)中再检索视图与表一样

 

二、触发器

1.概念

SQLite 的触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行调用。

(1)只有每当执行 delete,insert 或 update 操作时,才会触发,并执行指定的一条或多条 SQL 语句。

例如: 可以设置触发器,当删除 persons 表中 lucy 的信息时,自动删除 grade 表中与 lucy 相关的信息

(2)触发器常用于保证数据一致,以及每当更新或删除表时,将记录写入日志表

触发器是数据库中非常灵活的操作,使得数据库插上翅膀,比如物联网中用到的实时数据库,如果要用普通数据库达到实时数据库的效果,可以通过触发器实现一部分效果。

2.创建触发器

语法:

create trigger 触发器名 [before]after]

[insert|update]delete] on 表名

Begin  语句;   end;

Begin 和 end 之间就是触发的内容

例如: create trigger tg_delete after delete on persons begin

delete from grade where id=old.id;

end;

说明: 当执行: delete from persons where id=1l; 语句时,事件触发,执行 begin 与 end 之间的 SQL 语句(即回调函数)

注意:

old.id 等价于 persons.id,但此处不能写 persons.id,old.id 代表删除行的 id(id 代表两个表的关联列)

举例:以下是两张表,假如删除第一张表里的某个学生信息。

sqlite> select * from info;

id     name    addr

----   --------  -------

101     zs      bj

102     ls       tj

103     ww     sh

104     zs       cd

105     sw      cq

106     xh      hb

107

sqlite> select * from class;

id     score    year

----   --------  -------

101     40

102     40

103     60

104     60

105     90

106     90

107

/创建触发器

sqlite> create trigger tg_del after delete on info begin delete from class where id=old.id;end;

sqlite> schema

CREATE TABLE info(id INT , name text, addr text) ;

CREATE TABLE class(id INT, score INT , year text) ;

CREATE TRIGGER tg_del after .delete on info begin delete from class where id=old.id;end;

sqlite> delete from info where id=106;

sqlite> select * from info;

id     name    addr

----   --------  -------

101     zs      bj

102     ls       tj

103     ww     sh

104     zs       cd

105     sw      cq

107

sqlite> select * from class;

id     score    year

----   --------  -------

101     40

102     40

103     60

104     60

105     90

107

以上就是触发器的写法,但触发器的写法并不是都一样。

比如:更新,更新一般是针对相同内容进行修改。

举例:假如更改某个学生的id

sqlite> create trigger tg_up after update on info begin update class set id=new.id where id=old.id;end;

sqlite> .shcema

CREATE TABLE info(id INT , name text, addr text) ;

CREATE TABLE class(id INT, score INT , year text) ;

CREATE TRIGGER tg_del after .delete on info begin delete from class where id=old.id;end;

CREATE TRIGGER tg_up after update on info begin update class set id=new.id where id=old.id;

sqlite>update info set id=110 where id=103;

sqlite> select * from info;

id     name    addr

----   --------  -------

101     zs      bj

102     ls       tj

110     ww     sh

104     zs       cd

105     sw      cq

107

sqlite> select * from class;

id     score    year

----   --------  -------

101     40

102     40

110     60

104     60

105     90

107

在触发器中,begin 后的内容是任意的。触发器还有一个经典的应用是日志操作。

相关文章
|
2月前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
171 0
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
|
3月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
174 2
|
18天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
22天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
32 0
|
2月前
|
数据库连接 API 数据库
SQLite3 数据库 C语言API 打开函数sqlite3_open 详解
SQLite3 数据库 C语言API 打开函数sqlite3_open 详解
44 0
|
2月前
|
存储 SQL 数据挖掘
视图、触发器和存储过程:提升数据库功能
视图、触发器和存储过程:提升数据库功能
19 1
|
2月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
2月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
56 0
|
2月前
|
存储 SQL 关系型数据库
【MySQL 数据库】10、MySQL 的触发器
【MySQL 数据库】10、MySQL 的触发器
21 0