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 后的内容是任意的。触发器还有一个经典的应用是日志操作。

相关文章
|
29天前
|
关系型数据库 MySQL 数据处理
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
|
29天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
180 0
|
6天前
|
关系型数据库 MySQL 数据库
MySQL数据库——触发器-案例(Insert类型、Update类型和Delete类型)
MySQL数据库——触发器-案例(Insert类型、Update类型和Delete类型)
10 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL数据库——触发器-介绍、语法(创建,查看,删除)
MySQL数据库——触发器-介绍、语法(创建,查看,删除)
7 0
|
8天前
|
SQL 关系型数据库 数据库
17. Python 数据库操作之MySQL和SQLite实例
17. Python 数据库操作之MySQL和SQLite实例
41 2
|
9天前
|
SQL 存储 数据库
48. 【Android教程】数据库:SQLite 的使用
48. 【Android教程】数据库:SQLite 的使用
9 1
|
18天前
|
JavaScript 小程序 Shell
在JSTL 中使用小型数据库 SQLite
`code袁`是一位热爱分享和记录学习的大学生,主攻编程领域。他的个人主页在[CSDN](https://blog.csdn.net/qq_48164590),QQ号为2647996100,WeChat号为code8896。他分享了三个专栏:毕业设计与课程设计、微信小程序开发和Vue全程学习。文章介绍了SQLite数据库命令行工具的下载、使用方法,包括创建数据库、定义表结构、插入数据及退出命令。此外,还展示了如何将ER图转化为数据库。最后鼓励读者点赞和支持。
21 2
|
19天前
|
存储 关系型数据库 数据库
利用Python与SQLite构建轻量级数据库应用
在当今日益增长的数据处理需求下,数据库成为存储、检索和管理数据的关键技术。然而,对于小型项目或快速原型开发,大型数据库系统可能显得过于庞大和复杂。本文将介绍如何利用Python编程语言与SQLite轻量级数据库,快速搭建一个功能齐全、易于维护的数据库应用。我们将探讨SQLite数据库的特点、Python对SQLite的支持,并通过一个实际案例展示如何构建一个简单的数据库应用,为读者提供一种高效、灵活的解决方案。
|
28天前
|
SQL 开发框架 数据库连接
uniapp中sqlite数据库常用操作的简单封装
uniapp中sqlite数据库常用操作的简单封装
|
29天前
|
SQL Oracle 关系型数据库
数据库sqlserver-----触发器的插入,更新和删除
数据库sqlserver-----触发器的插入,更新和删除
32 3