SQLite的 DETACH DTABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。 如果数据库是在内存中或者是临时数据库,则该数据库将被摧毁,且内容将会丢失。 语法 SQLite 的 DETACH DATABASE 'Alias-Name' 语句的基本语法如下:
1 |
<span class="pln">DETACH DATABASE </span><span class="str">'Alias-Name'</span><span class="pun">;</span> |
在这里,’Alias-Name' 与您之前使用 ATTACH 语句附加数据库时所用到的别名相同。 实例 假设在前面的章节中您已经创建了一个数据库,并给它附加了 'test' 和 'currentDB’,使用 .database 命令,我们可以看到:
1 2 3 4 5 6 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">databases seq name file </span><span class="pun">---</span> <span class="pun">---------------</span> <span class="pun">----------------------</span> <span class="lit">0</span><span class="pln"> main </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db </span><span class="lit">2</span><span class="pln"> test </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db </span><span class="lit">3</span><span class="pln"> currentDB </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db</span> |
现在,让我们尝试把 'currentDB' 从 testDB.db 中分离出来,如下所示:
1 |
<span class="pln">sqlite</span><span class="pun">></span><span class="pln"> DETACH DATABASE </span><span class="str">'currentDB'</span><span class="pun">;</span> |
现在,如果检查当前附加的数据库,您会发现,testDB.db 仍与 'test' 和 'main' 保持连接。
1 2 3 4 5 6 7 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">databases seq name file </span><span class="pun">---</span> <span class="pun">---------------</span> <span class="pun">----------------------</span> <span class="lit">0</span><span class="pln"> main </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db </span><span class="lit">2</span><span class="pln"> test </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db from:<a href="http://www.runoob.com/sqlite/sqlite-detach-database.html">http://www.runoob.com/sqlite/sqlite-detach-database.html</a></span> |
假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。 语法 SQLite 的 ATTACH DATABASE 语句的基本语法如下:
1 |
<span class="pln">ATTACH DATABASE </span><span class="str">'DatabaseName'</span> <span class="typ">As</span> <span class="str">'Alias-Name'</span><span class="pun">;</span> |
如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 'Alias-Name' 绑定在一起。 实例 如果想附加一个现有的数据库 testDB.db,则 ATTACH DATABASE 语句将如下所示:
1 |
<span class="pln">sqlite</span><span class="pun">></span><span class="pln"> ATTACH DATABASE </span><span class="str">'testDB.db'</span> <span class="kwd">as</span> <span class="str">'TEST'</span><span class="pun">;</span> |
使用 SQLite .database 命令来显示附加的数据库。
1 2 3 4 5 |
<span class="pln">sqlite</span><span class="pun">></span> <span class="pun">.</span><span class="pln">database seq name file </span><span class="pun">---</span> <span class="pun">---------------</span> <span class="pun">----------------------</span> <span class="lit">0</span><span class="pln"> main </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db </span><span class="lit">2</span><span class="pln"> test </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db</span> |
数据库名称 main 和 temp 被保留用于主数据库和存储临时表及其他临时数据对象的数据库。这两个数据库名称可用于每个数据库连接,且不应该被用于附加,否则将得到一个警告消息,如下所示:
1 2 3 4 5 6 7 |
<span class="pln">sqlite</span><span class="pun">></span><span class="pln"> ATTACH DATABASE </span><span class="str">'testDB.db'</span> <span class="kwd">as</span> <span class="str">'TEMP'</span><span class="pun">;</span> <span class="typ">Error</span><span class="pun">:</span><span class="pln"> database TEMP </span><span class="kwd">is</span><span class="pln"> already </span><span class="kwd">in</span> <span class="kwd">use</span><span class="pln"> sqlite</span><span class="pun">></span><span class="pln"> ATTACH DATABASE </span><span class="str">'testDB.db'</span> <span class="kwd">as</span> <span class="str">'main'</span><span class="pun">;</span> <span class="typ">Error</span><span class="pun">:</span><span class="pln"> database TEMP </span><span class="kwd">is</span><span class="pln"> already </span><span class="kwd">in</span> <span class="kwd">use from:<a href="http://www.runoob.com/sqlite/sqlite-attach-database.html">http://www.runoob.com/sqlite/sqlite-attach-database.html</a></span> |
SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库。您不需要任何特殊的权限即可创建一个数据。 语法 sqlite3 命令的基本语法如下:
1 |
<span class="pln">$sqlite3 </span><span class="typ">DatabaseName</span><span class="pun">.</span><span class="pln">db</span> |
通常情况下,数据库名称在 RDBMS 内应该是唯一的。 实例 如果您想创建一个新的数据库 <testDB.db>,SQLITE3 语句如下所示:
1 2 3 4 5 |
<span class="pln">$sqlite3 testDB</span><span class="pun">.</span><span class="pln">db </span><span class="typ">SQLite</span><span class="pln"> version </span><span class="lit">3.7</span><span class="pun">.</span><span class="lit">15.2</span> <span class="lit">2013</span><span class="pun">-</span><span class="lit">01</span><span class="pun">-</span><span class="lit">09</span> <span class="lit">11</span><span class="pun">:</span><span class="lit">53</span><span class="pun">:</span><span class="lit">05</span> <span class="typ">Enter</span> <span class="str">".help"</span> <span class="kwd">for</span><span class="pln"> instructions </span><span class="typ">Enter</span><span class="pln"> SQL statements terminated </span><span class="kwd">with</span><span class="pln"> a </span><span class="str">";"</span><span class="pln"> sqlite</span><span class="pun">></span> |
上面的命令将在当前目录下创建一个文件 testDB.db。该文件将被 SQLite 引擎用作数据库。如果您已经注意到 sqlite3 命令在成功创建数据库文件之后,将提供一个 sqlite> 提示符。 一旦数据库被创建,您就可以使用 SQLite 的 .databases 命令来检查它是否在数据库列表中,如下所示:
1 2 3 4 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">databases seq name file </span><span class="pun">---</span> <span class="pun">---------------</span> <span class="pun">----------------------</span> <span class="lit">0</span><span class="pln"> main </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="pln">sqlite</span><span class="pun">/</span><span class="pln">testDB</span><span class="pun">.</span><span class="pln">db</span> |
您可以使用 SQLite .quit 命令退出 sqlite 提示符,如下所示:
1 2 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">quit $</span> |
.dump 命令 您可以在命令提示符中使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中,如下所示:
1 |
<span class="pln">$sqlite3 testDB</span><span class="pun">.</span><span class="pln">db </span><span class="pun">.</span><span class="kwd">dump</span> <span class="pun">></span><span class="pln"> testDB</span><span class="pun">.</span><span class="pln">sql</span> |
上面的命令将转换整个 testDB.db 数据库的内容到 SQLite 的语句中,并将其转储到 ASCII 文本文件 testDB.sql 中。您可以通过简单的方式从生成的 testDB.sql 恢复,如下所示:
1 |
<span class="pln">$sqlite3 testDB</span><span class="pun">.</span><span class="pln">db </span><span class="pun"><</span><span class="pln"> testDB</span><span class="pun">.</span><span class="pln">sql</span> |
此时的数据库是空的,一旦数据库中有表和数据,您可以尝试上述两个程序。现在,让我们继续学习下一章。 from:http://www.runoob.com/sqlite/sqlite-create-database.html
View Details本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。 让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。
1 2 3 4 |
<span class="pln">$ sqlite3 </span><span class="typ">SQLite</span><span class="pln"> version </span><span class="lit">3.3</span><span class="pun">.</span><span class="lit">6</span> <span class="typ">Enter</span> <span class="str">".help"</span> <span class="kwd">for</span><span class="pln"> instructions sqlite</span><span class="pun">></span> |
如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:
1 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">help</span> |
上面的命令会显示各种重要的 SQLite 点命令的列表,如下所示: 命令 描述 .backup ?DB? FILE 备份 DB 数据库(默认是 "main")到 FILE 文件。 .bail ON|OFF 发生错误后停止。默认为 OFF。 .databases 列出附加数据库的名称和文件。 .dump ?TABLE? 以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 .echo ON|OFF 开启或关闭 echo 命令。 .exit 退出 SQLite 提示符。 .explain ON|OFF 开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。 .header(s) ON|OFF 开启或关闭头部显示。 .help 显示消息。 .import FILE TABLE 导入来自 FILE 文件的数据到 TABLE 表中。 .indices ?TABLE? 显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 […]
View DetailsSQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。 大小写敏感性 有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。 注释 SQLite 注释是附加的注释,可以在 SQLite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他 SQL 语句的中间,但它们不能嵌套。 SQL 注释以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。 您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个 "*/" 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。
1 |
<span class="pln">sqlite</span><span class="pun">>.</span><span class="pln">help </span><span class="pun">--</span> <span class="typ">This</span> <span class="kwd">is</span><span class="pln"> a single line comment</span> |
SQLite 语句 所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。 SQLite ANALYZE 语句:
1 2 3 4 5 |
<span class="pln">ANALYZE</span><span class="pun">;</span> <span class="kwd">or</span><span class="pln"> ANALYZE database_name</span><span class="pun">;</span> <span class="kwd">or</span><span class="pln"> ANALYZE database_name</span><span class="pun">.</span><span class="pln">table_name</span><span class="pun">;</span> |
SQLite AND/OR 子句:
1 2 3 |
<span class="pln">SELECT column1</span><span class="pun">,</span><span class="pln"> column2</span><span class="pun">....</span><span class="pln">columnN FROM table_name WHERE CONDITION</span><span class="pun">-</span><span class="lit">1</span> <span class="pun">{</span><span class="pln">AND</span><span class="pun">|</span><span class="pln">OR</span><span class="pun">}</span><span class="pln"> CONDITION</span><span class="pun">-</span><span class="lit">2</span><span class="pun">;</span> |
SQLite ALTER TABLE 语句:
1 |
<span class="pln">ALTER TABLE table_name ADD COLUMN column_def</span><span class="pun">...;</span> |
SQLite ALTER TABLE 语句(Rename):
1 |
<span class="pln">ALTER TABLE table_name RENAME TO new_table_name</span><span class="pun">;</span> |
SQLite ATTACH DATABASE 语句:
1 |
<span class="pln">ATTACH DATABASE </span><span class="str">'DatabaseName'</span> <span class="typ">As</span> <span class="str">'Alias-Name'</span><span class="pun">;</span> |
SQLite BEGIN TRANSACTION 语句:
1 2 3 |
<span class="kwd">BEGIN</span><span class="pun">;</span> <span class="kwd">or</span> <span class="kwd">BEGIN</span><span class="pln"> EXCLUSIVE TRANSACTION</span><span class="pun">;</span> |
SQLite BETWEEN 子句:
1 2 3 |
<span class="pln">SELECT column1</span><span class="pun">,</span><span class="pln"> column2</span><span class="pun">....</span><span class="pln">columnN FROM table_name WHERE column_name BETWEEN val</span><span class="pun">-</span><span class="lit">1</span><span class="pln"> AND val</span><span class="pun">-</span><span class="lit">2</span><span class="pun">;</span> |
SQLite COMMIT 语句:
1 |
<span class="pln">COMMIT</span><span class="pun">;</span> |
SQLite CREATE INDEX 语句:
1 2 |
<span class="pln">CREATE INDEX index_name ON table_name </span><span class="pun">(</span><span class="pln"> column_name COLLATE NOCASE </span><span class="pun">);</span> |
SQLite CREATE UNIQUE INDEX […]
View DetailsSQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。 您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。 SQLite 存储类 每个存储在 SQLite 数据库中的值都具有以下存储类之一: 存储类 描述 NULL 值是一个 NULL 值。 INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 BLOB 值是一个 blob 数据,完全根据它的输入存储。 SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。 SQLite 亲和(Affinity)类型 SQLite支持列的亲和类型概念。任何列仍然可以存储任何类型的数据,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式。SQLite目前的版本支持以下五种亲缘类型: 亲和类型 描述 TEXT 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。 NUMERIC 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。 INTEGER 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。 REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。 NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。 SQLite 亲和类型(Affinity)及类型名称 下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的亲和类型: 数据类型 亲和类型 INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 INTEGER CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB TEXT […]
View Details搜集了一些SQLite工具,在这里做个总结,有的工具用的多一些,有的只是简单试用,甚至未试用,所以有描述不当的还请回复指正,也欢迎补充完善! 2015-03-11 更新情况: SQLiteSpy最新版本1.9.8,重大改变,支持db拖拽 SQLiteStudio最新版本3.0.3,重大改变,打开数据量较大的数据库速度明显改善,还有count查询,堪比SQLiteExpert SQLiteExpert 最新版本3.5.76,相信也更好用了,尚未体验,SQLiteStudio已经很满足了,推荐! 【免费且保持更新】 1、SQLiteSpy 免费 单文件 http://www.yunqa.de/delphi/doku.php/products/sqlitespy/ 截至2012/9/14最新版本 SQLiteSpy 1.9.1 – 28 Jul 2011 单文件,界面设计紧凑,较稳定,功能较少,创建表与添加数据均需sql语句,快捷键教方便, 作为数据浏览和修改工具极佳,视图编码为utf-8,对gbk2312显示乱码。 能满足一般的应用,但没有导出数据表功能, 同时只能打开一个数据库文件 不支持二进制字段编辑 2、SQLiteStudio (推荐)开源 免费 单文件 http://sqlitestudio.one.pl/ 更新及时,功能完善的sqlite2和sqlite3工具,视图编码支持utf8。 支持导出数据格式:csv、html、plain、sql、xml, 可同时打开多个数据库文件 支持查看和编辑二进制字段 3、SQLiteExpert 个人免费 要安装 http://www.sqliteexpert.com/ 功能非常强大,如果上述两款不能满足,就试试这个吧 4、SQLite Manager(Firefox插件)免费,需要提前安装Firefox浏览器 https://addons.mozilla.org/zh-cn/firefox/addon/sqlite-manager/ 基本功能齐全,可以将数据表导出为sql数据格式。 【免费但可能已停止更新】 1、Sqlite3Explorer 免费 http://www.singular.gr/sqlite/ 两年未更新,截至2012/9/14最新版本 V3.04 04/12/2010 但xp下只是别gbk2312编码,界面紧凑,功能全面。 2、SQLite Database Browser 免费 http://sqlitebrowser.sourceforge.net/ 简单易用,具有基本数据库管理查询功能,并且能够导入和导出数据表,支持sql文件和csv两种方式。 似乎不再更新,截至2012/9/14最新版本: Version 2.0b1 released – Based on Qt4.6 – 12/09/2009 3、SQLiteAdmin 免费 http://sqliteadmin.orbmu2k.de/ 功能齐全,界面有多语言,带导出功能,很久未更新,只识别sqlite2,可用于sqlite2到sqlite3的转换, win xp下视图的编码为gbk2312,对utf-8显示乱码。 截至2012/9/14最新版本 [0.8.3.2]大概是2007年10月份 【收费版,通常功能丰富,更新及时】 1、Sqlite.Developer 收费 ¥79元 有中文版 http://www.sqlitedeveloper.com 2、SQLite Code Factory 收费 非商业单用户 $49 http://www.sqlmaestro.com […]
View Details参考: SQLite 官网 SQL As Understood By SQLite System.Data.SQLite 菜鸟教程 SQL 教程 章节: 1、下载安装 2、数据类型 3、创建数据库 4、删除数据库 5、创建表 6、删除表 7、查询表结构 8、更改表名 9、增加列(字段) 10、读取创建表的 SQL 语句 11、更改列名 12、删除列 13、插入数据 14、替换数据 15、更新数据 16、删除数据 17、查询数据 18、获取查询数据的行数(多少条记录) 19、事务 Transaction 20、整理数据库 正文: 一、下载安装 这段时间在学习 C# 编程中,想写一个简单的进销存程序,就想到了用数据库,需要一个简单便携的桌面数据库,想自己写个,功力太浅,可以做为以后练手学习的项目。原来会用的 Foxpro 已经被微软不知丢在哪个旮旯了,在网上找了一下,发现只有 Access 和 Sqlite 可选,看了很多对比,决定还是学习使用 Sqlite。 在 System.Data.SQLite 官网的 download 中的 Setups for 64-bit Windows (.NET Framework 4.6) sqlite-netFx46-setup-x64-2015-1.0.104.0.exe (17.99 MiB) 下载然后运行安装。 更简单的做法是在 Visual Studio 2017 的 NuGet 中,输入:install-package system.data.sqlite.x64。 sqlite数据库的可视化工具中, SqliteExpert 不错,下载 SQLite Expert Personal 4.x 。 工具备齐了,由于知道上面这个System data Sqlite 是用 C# 封装好的,下来我们打开Visual Studio 2017,新开个工程,在菜单“项目”→“添加引用”→“浏览” […]
View Details