sqlite3-sqlite3使用入门

前端之家收集整理的这篇文章主要介绍了sqlite3-sqlite3使用入门前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite 简介

sqlite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 sql 数据库引擎。sqlite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。sqlite 源代码不受版权限制。

它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

就像其他数据库sqlite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。sqlite 直接访问其存储文件

为什么要用 sqlite?

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。

  • sqlite 不需要配置,这意味着不需要安装或管理。

  • 一个完整的 sqlite 数据库是存储在一个单一的跨平台的磁盘文件

  • sqlite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。

  • sqlite 是自给自足的,这意味着不需要任何外部的依赖。

  • sqlite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。

  • sqlite 支持 sql92(sql2)标准的大多数查询语言的功能

  • sqlite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。

  • sqlite 可在 UNIX(Linux,Mac OS-X,Android,iOS)和 Windows(Win32,WinCE,WinRT)中运行。

sqlite 局限性

sqlite 中,sql92 不支持的特性如下所示:

@H_301_70@RIGHT OUTER JOIN @H_301_70@只实现了 LEFT OUTER JOIN。 @H_301_70@FULL OUTER JOIN @H_301_70@只实现了 LEFT OUTER JOIN。 @H_301_70@ALTER TABLE @H_301_70@支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT。 @H_301_70@Trigger 支持 @H_301_70@支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。 @H_301_70@VIEWs @H_301_70@在 sqlite 中,视图是只读的。您不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句。 @H_301_70@GRANT 和 REVOKE @H_301_70@可以应用的唯一的访问权限是底层操作系统的正常文件访问权限。
特性 描述

sqlite 命令

与关系数据库进行交互的标准 sqlite 命令类似于 sql。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:

DDL - 数据定义语言

@H_301_70@CREATE @H_301_70@创建一个新的表,一个表的视图,或者数据库中的其他对象。 @H_301_70@ALTER @H_301_70@修改数据库中的某个已有的数据库对象,比如一个表。 @H_301_70@DROP @H_301_70@删除整个表,或者表的视图,或者数据库中的其他对象。
命令 描述

DML - 数据操作语言

@H_301_70@INSERT @H_301_70@创建一条记录。 @H_301_70@UPDATE @H_301_70@修改记录。 @H_301_70@DELETE @H_301_70@删除记录。
命令 描述

DQL - 数据查询语言

@H_301_70@SELECT @H_301_70@从一个或多个表中检索某些记录。
命令 描述

sqlite 安装

在 Windows 上安装 sqlite


即安装成功。

sqlite 命令

如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:

sqlite>.help

上面的命令会显示各种重要的 sqlite 点命令的列表,如下所示:

@H_301_70@.backup ?DB? FILE @H_301_70@备份 DB 数据库(默认是 "main")到 FILE 文件。 @H_301_70@.bail ON|OFF @H_301_70@发生错误后停止。默认为 OFF。 @H_301_70@.databases @H_301_70@列出附加数据库名称文件。 @H_301_70@.dump ?TABLE? @H_301_70@以 sql 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 @H_301_70@.echo ON|OFF @H_301_70@开启或关闭 echo 命令。 @H_301_70@.exit @H_301_70@退出sqlite 提示符。 @H_301_70@.explain ON|OFF @H_301_70@开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。 @H_301_70@.header(s) ON|OFF @H_301_70@开启或关闭头部显示。 @H_301_70@.help @H_301_70@显示消息。 @H_301_70@.import FILE TABLE @H_301_70@导入来自 FILE 文件的数据到 TABLE 表中。 @H_301_70@.indices ?TABLE? @H_301_70@显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 @H_301_70@.load FILE ?ENTRY? @H_301_70@加载一个扩展库。 @H_301_70@.log FILE|off @H_301_70@开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。 @H_301_70@.mode MODE @H_301_70@设置输出模式,MODE 可以是下列之一:
  • csv 逗号分隔的值

  • column 左对齐的列

  • html HTML 的 <table> 代码

  • insert TABLE 表的 sql 插入(insert)语句

  • line 每行一个值

  • list 由 .separator 字符串分隔的值

  • tabs 由 Tab 分隔的值

  • tcl TCL 列表元素

@H_301_70@.nullvalue STRING @H_301_70@在 NULL 值的地方输出 STRING 字符串。 @H_301_70@.output FILENAME @H_301_70@发送输出到 FILENAME 文件。 @H_301_70@.output stdout @H_301_70@发送输出到屏幕。 @H_301_70@.print STRING... @H_301_70@逐字地输出 STRING 字符串。 @H_301_70@.prompt MAIN CONTINUE @H_301_70@替换标准提示符。 @H_301_70@.quit @H_301_70@退出sqlite 提示符。 @H_301_70@.read FILENAME @H_301_70@执行 FILENAME 文件中的 sql。 @H_301_70@.schema ?TABLE? @H_301_70@显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。 @H_301_70@.separator STRING @H_301_70@改变输出模式和 .import 所使用的分隔符。 @H_301_70@.show @H_301_70@显示各种设置的当前值。 @H_301_70@.stats ON|OFF @H_301_70@开启或关闭统计。 @H_301_70@.tables ?PATTERN? @H_301_70@列出匹配 LIKE 模式的表的名称。 @H_301_70@.timeout MS @H_301_70@尝试打开锁定的表 MS 微秒。 @H_301_70@.width NUM NUM @H_301_70@为 "column" 模式设置列宽度。 @H_301_70@.timer ON|OFF @H_301_70@开启或关闭cpu 定时器测量。
命令 描述

让我们尝试使用 .show 命令,来查看 sqlite 命令提示符的默认设置。

sqlite>.show
     echo: off
  explain: off
  headers: off
     mode: column
nullvalue: ""
   output: stdout
separator: "|"
    width:
sqlite>
确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。

格式化输出

您可以使用下列的点命令来格式化输出为本教程下面所列出的格式:

sqlite>.header on
sqlite>.mode column
sqlite>.timer on
sqlite>

上面设置将产生如下格式的输出

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
cpu Time: user 0.000000 sys 0.000000

sqlite_master 表格

主表中保存数据库表的关键信息,并把它命名为 sqlite_master。如要查看表概要,可按如下操作:

sqlite>.schema sqlite_master

这将产生如下结果:

CREATE TABLE sqlite_master (
  type text,name text,tbl_name text,rootpage integer,sql text
);

sqlite 语法

大小写敏感性

有个重要的点值得注意,sqlite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOBglobsqlite 的语句中有不同的含义。

注释

sqlite 注释是附加的注释,可以在 sqlite 代码添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他 sql 语句的中间,但它们不能嵌套。

sql 注释以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。

您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个 "*/" 字符对或直到输入结束,以先到者为准。C 庚哥的注释可以跨越多行。

sqlite>.help -- This is a single line comment

sqlite 语句

所有的 sqlite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。

sqlite ANALYZE 语句:

ANALYZE;
or
ANALYZE database_name;
or
ANALYZE database_name.table_name;

sqlite AND/OR 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

sqlite ALTER TABLE 语句:

ALTER TABLE table_name ADD COLUMN column_def...;

sqlite ALTER TABLE 语句(Rename):

ALTER TABLE table_name RENAME TO new_table_name;

sqlite ATTACH DATABASE 语句:

ATTACH DATABASE 'DatabaseName' As 'Alias-Name';

sqlite BEGIN TRANSACTION 语句:

BEGIN;
or
BEGIN EXCLUSIVE TRANSACTION;

sqlite BETWEEN 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

sqlite COMMIT 语句:

COMMIT;

sqlite CREATE INDEX 语句:

CREATE INDEX index_name
ON table_name ( column_name COLLATE NOCASE );

sqlite CREATE UNIQUE INDEX 语句:

CREATE UNIQUE INDEX index_name
ON table_name ( column1,column2,...columnN);

sqlite CREATE TABLE 语句:

CREATE TABLE table_name(
   column1 datatype,column2 datatype,column3 datatype,.....
   columnN datatype,PRIMARY KEY( one or more columns )
);

sqlite CREATE TRIGGER 语句:

CREATE TRIGGER database_name.trigger_name 
BEFORE INSERT ON table_name FOR EACH ROW
BEGIN 
   stmt1; 
   stmt2;
   ....
END;

sqlite CREATE VIEW 语句:

CREATE VIEW database_name.view_name  AS
SELECT statement....;

sqlite CREATE VIRTUAL TABLE 语句:

CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log );
or
CREATE VIRTUAL TABLE database_name.table_name USING fts3( );

sqlite COMMIT TRANSACTION 语句:

COMMIT;

sqlite COUNT 子句:

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

sqlite DELETE 语句:

DELETE FROM table_name
WHERE  {CONDITION};

sqlite DETACH DATABASE 语句:

DETACH DATABASE 'Alias-Name';

sqlite DISTINCT 子句:

SELECT DISTINCT column1,column2....columnN
FROM   table_name;

sqlite DROP INDEX 语句:

DROP INDEX database_name.index_name;

sqlite DROP TABLE 语句:

DROP TABLE database_name.table_name;

sqlite DROP VIEW 语句:

DROP INDEX database_name.view_name;

sqlite DROP TRIGGER 语句:

DROP INDEX database_name.trigger_name;

sqlite EXISTS 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name EXISTS (SELECT * FROM   table_name );

sqlite EXPLAIN 语句:

EXPLAIN INSERT statement...;
or 
EXPLAIN QUERY PLAN SELECT statement...;

sqlite GLOB 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name GLOB { PATTERN };

sqlite GROUP BY 子句:

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

sqlite HAVING 子句:

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

sqlite INSERT INTO 语句:

INSERT INTO table_name( column1,column2....columnN)
VALUES ( value1,value2....valueN);

sqlite IN 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name IN (val-1,val-2,...val-N);

sqlite Like 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

sqlite NOT IN 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  column_name NOT IN (val-1,...val-N);

sqlite ORDER BY 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

sqlite PRAGMA 语句:

PRAGMA pragma_name;

For example:

PRAGMA page_size;
PRAGMA cache_size = 1024;
PRAGMA table_info(table_name);

sqlite RELEASE SAVEPOINT 语句:

RELEASE savepoint_name;

sqlite REINDEX 语句:

REINDEX collation_name;
REINDEX database_name.index_name;
REINDEX database_name.table_name;

sqlite ROLLBACK 语句:

ROLLBACK;
or
ROLLBACK TO SAVEPOINT savepoint_name;

sqlite SAVEPOINT 语句:

SAVEPOINT savepoint_name;

sqlite SELECT 语句:

SELECT column1,column2....columnN
FROM   table_name;

sqlite UPDATE 语句:

UPDATE table_name
SET column1 = value1,column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

sqlite VACUUM 语句:

VACUUM;

sqlite WHERE 子句:

SELECT column1,column2....columnN
FROM   table_name
WHERE  CONDITION;
原文链接:https://www.f2er.com/sqlite/199812.html

猜你在找的Sqlite相关文章