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月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
73 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
31 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
170 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
40 0
|
3月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08