基本的DDL、DML

创建表,包含日期字段

CREATE TABLE  WordTable (id  integer PRIMARY KEY autoincrement , word  TEXT ,  updatedate datetime )  

插入一行,包含日期字段

INSERT INTO WordTable (id,word,updatedate) VALUES (6,'ceshi','2020-08-11 13:42:29');

查找,包含日期字段

SELECT * FROM WordTable  WHERE updatedate>='2020-08-11 10:42:29' AND updatedate<='2020-08-11 10:42:29'

查找,按照排序以及限制条目输出

SELECT * FROM TX WHERE updatedate LIKE '%:%' ORDER BY updatedate ASC LIMIT 1 
---》DESC:降序 ASC:升序
---》%:匹配任意长度字符串
---》_:匹配一个字符
---》LIMIT 1:限制输出一条结果,必须在sql语句最后

删除记录

DELETE FROM table WHERE User='555'

更新数据

某一项数值加1

UPDATE User SET Logins=Logins+1 WHERE User='555'

更新多个字段

UPDATE Tx SET Ip='11111',Name='2222' WHERE Uid='TTTTTTTTTTTTTTT1'

视图

视图(View) 是一种虚表,允许用户实现以下几点:

  • 用户或用户组查找结构数据的方式更自然或直观。
  • 限制数据访问,用户只能看到有限的数据,而不是完整的表。
  • 汇总各种表中的数据,用于生成报告。

SQLite 视图内容是随着实际数据表实时变化,是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。

//创建
CREATE VIEW my_view AS SELECT Ip FROM TX
//删除
DROP VIEW my_view

索引

原理

  • 使用的是B-树原理

影响

  • 提高查询的速度
  • 创建索引需要耗费一定的时间
  • 索引需要占用物理空间
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

使用场景

  • 在经常需要搜索的列上创建
  • 索引不应该使用在较小的表上。
  • 索引不应该使用在有频繁的大批量的更新或插入操作的表上。
  • 索引不应该使用在含有大量的 NULL 值的列上。

单列索引

CREATE INDEX index_name ON table_name (column_name);

唯一索引

使用唯一索引不仅是为了性能,同时也为了数据的完整性。唯一索引不允许任何重复的值插入到表中。

CREATE UNIQUE INDEX index_name on table_name (column_name);

组合索引

CREATE INDEX index_name on table_name (column1, column2);

隐式索引

隐式索引是在创建对象时,由数据库服务器自动创建的索引。索引自动创建为主键约束和唯一约束。

删除索引

DROP INDEX index_name;

如何正确使用索引

比如通过:CREATE INDEX comp_ind ON table1(x, y, z)创建索引,那么x,xy,xyz都是前导列,而yz,y,z这样的就不是。在WHERE子句中,前导列必须使用等于或者IN操作,最右边的列可以使用不等式,这样索引才可以完全生效。同时,WHERE子句中的列不需要全建立了索引,但是必须保证建立索引的列之间没有间隙。

例子:

//创建索引
CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z);  //查询语句
...WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello' 
abcd四列都是有效的,因为只有等于和IN操作,并且是前导列。  //查询语句
... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello' 
那这里只有a,b和c的索引会是有效的,d列的索引会失效,因为它在c列的右边,而c列使用了不等式,根据使用不等式的限制,c列已经属于最右边。 //查询语句
... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello' 
索引将不会被使用,因为没有使用前导列,这个查询会是一个全表查询。 //对于between,or,like语句,都无法使用索引

触发器

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

关键字

  • new 代表刚创建的行,old刚删除的行
  • new在before触发器中赋值,取值;在after触发器中取值。
  • new是新插入的数据,old是原来的数据
  • insert只会有new,代表着要插入的新记录
  • delete只会有old,代表着要删除的记录

INSERT、DELETE 和 UPDATE创建触发器的基本语法

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name
ON table_name
BEGIN
-- 触发器逻辑....
END;

UPDATE指定字段创建触发器语法(INSERT、DELETE没有此特性)

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
BEGIN
-- 触发器逻辑....
END;

列出触发器

  1. 列出数据库所有触发器
SELECT name FROM sqlite_master
WHERE type = 'trigger';
  1. 列出特定表触发器
SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'tablename';

删除触发器

DROP TRIGGER trigger_name;

实例

  1. 创建COMPANY表
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
  1. 创建AUDIT表
CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
  1. 在 COMPANY 表上创建一个触发器
CREATE TRIGGER audit_log AFTER INSERT
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;
  1. 在 COMPANY 表中创建一个记录,
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
  1. 结果

COMPANY表

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0

AUDIT 表

EMP_ID ENTRY_DATE
1 2013-04-05 06:26:00

事务

  • 事务定义了一组SQL命令的边界,这一组命令或者作为一个整体被全部执行,或者全部不执行,这被称作为数据库完整性的原子性原则。
  • 默认情况下,SQLite中每条命令都会自成一个事务,自动提交或回滚,此操作模式称为隐式事务或者自动提交模式。
  • 事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。

开启事务命令

  • 事务(Transaction)可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。此类事务通常会持续执行下去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。不过在数据库关闭或发生错误时,事务处理也会回滚。
BEGIN;
或者
BEGIN TRANSACTION

提交事务命令

  • 用于把事务调用的更改保存到数据库中的事务命令。
  • 把自上次 COMMIT 或 ROLLBACK 命令以来的所有事务保存到数据库。
COMMIT
或者
END TRANSACTION

回滚命令

  • 用于撤消尚未保存到数据库的事务的事务命令。
  • 只能用于撤销自上次发出 COMMIT 或 ROLLBACK 命令以来的事务。
ROLLBACK

实例

  1. 删除后再回滚,记录还在
BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
  1. 删除后提交,删除成功,记录已被删除
BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

专业术语

DML(Data Manipulation Lanaguage,数据操纵语言)

DML就是我们经常用到的SELECT、INSERT、UPDATE和DELETE语句,主要是用来对数据进行CRUD:增查改删(create, read (retrieve), update, delete)操作。

DDL(Data Definition Language,数据定义语言)

DDL就是我们在创建表的时候用到的一些语句,比如说CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构、数据类型、表之间的链接或约束等初始化工作上。

DCL(Data Control Language,数据库控制语言)

DCL是用来设置或更改数据库用户或角色权限的语句,包括GRANT、DENY、REVOKE等语句。

【知识点】SQLite3总结的更多相关文章

  1. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  2. iOS sqlite3数据库解析

    看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this co ...

  3. 【重走Android之路】【路线篇(二)】知识点归纳

    [重走Android之路][路线篇(二)]知识点归纳   参考:http://blog.csdn.net/xujing81/article/details/7313507   第一阶段:Java面向对 ...

  4. sqlite3 多线程和锁 ,优化插入速度及性能优化

    一. 是否支持多线程?   SQLite官网上的"Is SQLite threadsafe?"这个问答. 简单来说,从3.3.1版本开始,它就是线程安全的了.而iOS的SQLite ...

  5. 四种数据持久化方式(下) :SQLite3 和 Core Data

    在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...

  6. Learn Rails5.2- ActiveRecord: sqlite3的用法, Query查询语法。乐观锁和悲观锁案例,查询语法includes(), 多态关联,destory和delete, Scope, Validats, Migrations

    rails generate model photo title:string album:references 这会产生一个album_id列,当建立belongs_to关联时,需要用到. refe ...

  7. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  8. python上的数据库sqlite3——插入多行数据

    学校课程上的一个知识点,一个简单的课后习题:一劳永逸实现多行数据的插入(应该是这个意思,老师也没讲清楚).直接上代码了没啥好讲的,我感觉这个思路好捞. import sqlite3 con = sql ...

  9. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

随机推荐

  1. 使用Qt实现一个必应壁纸客户端

    概要 必应的每日壁纸很好看,但是看不到一周以前的壁纸图片,日前使用python开发了必应壁纸收集站,可惜这样的收集站只能在线浏览,我在想要是有一款软件能够下载每日必应壁纸,并应用到windows的桌面 ...

  2. Envoy:离群点检测 outlier detection

    outlier detection 在异常检测领域中,常常需要决定新观察的点是否属于与现有观察点相同的分布(则它称为inlier),或者被认为是不同的(称为outlier).离群是异常的数据,但是不一 ...

  3. centos保存rpm到本地以及使用yum完全卸载软件包

    目录 保存安装的rpm到本地 方法一: 方法二(推荐): yum卸载软件包包括依赖 保存安装的rpm到本地 方法一: [root@ServerA ~]# vim /etc/yum.conf [main ...

  4. Win10 禁用摄像头的方法及注意事项

    Win10 禁用摄像头的方法及注意事项 windows教程 2020-03-04  223 最新的Windows10系统中应该如何禁用摄像头呢?下面MS酋长与大家分享一下.当然,如果你说用个便利贴把摄 ...

  5. Spring Cloud(Dalston.SR1)

    Spring Cloud 示例项目地址:https://github.com/Yanshaoshuai/microservicecloud Eureka 集群搭建 microservicecloud- ...

  6. lua中求table长度--(转自有心故我在)

    关于lua table介绍,看以前的文章http://www.cnblogs.com/youxin/p/3672467.html. 官方文档是这么描述#的: 取长度操作符写作一元操作 #. 字符串的长 ...

  7. linux中级之keepalived概念

    一.HA集群中的相关术语 1.节点(node) 运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节 ...

  8. Linux shell用sed批量更改文件名的相关内容

    示例 去除特定字符 目标:将指定目录下文件名中sprint替换为dev 方法: [root@Skip-ftp test]# for i in `ls` > do > name=`echo ...

  9. Log4j实战,依赖分析

    背景 在项目中经常被log4j的各种依赖冲突搞的焦头烂额,久病成良医啊,在这里记录一下我对log4j的理解与分析 log4j 与 log4j2 log4j2是log4j的升级版,二者互不兼容,据说lo ...

  10. cachecloud生产环境搭建

    步骤 1 机器管理 机器初始化Redis环境 添加机器  执行:  cachecloud-init.sh脚本 2 cachecloud添加机器的时候需要添加一个用户cachecloud-open ad ...