15条SQLite3语句
15条SQLite3语句
转自:http://www.thegeekstuff.com/2012/09/sqlite-command-examples/
SQLite3 is very lightweight SQL database which focuses on simplicity more than anything else. This is a self-contained serverless database engine, which is very simple to install and use.
While most of the commands in the SQLite are similar to SQL commands of other datbases like MySQL and ORACLE, there are some SQLite SQL commands that are different.
This article explains all the basic SQL commands that you need to know to use the SQLite database effectively.
If you don’t have sqlite installed, execute “yum install sqlite” to install it. You can also install SQLite database from source to get the latest version.
1. Create a SQLite Database (and a Table)
First, let us understand how create a SQLite database with couple of tables, populate some data, and view those records.
The following example creates a database called employee.db. This also creates an employee table with 3 columns (id, name and title), and a department table in the company.db database. We’ve purposefully missed the deptid column in the employee table. We’ll see how to add that later.
# sqlite3 company.db
sqlite> create table employee(empid integer,name varchar(20),title varchar(10));
sqlite> create table department(deptid integer,name varchar(20),location varchar(10));
sqlite> .quit
Note: To exit from the SQLite commandline “sqlite>” prompt, type “.quit” as shown above.
A SQLite database is nothing but a file that gets created under your current directory as shown below.
# ls -l company.db -rw-r--r--. 1 root root 3072 Sep 19 11:21 company.db
2. Insert Records
The following example populates both employee and department table with some sample records.
You can execute all the insert statements from the sqlite command line, or you can add those commands into a file and execute the file as shown below.
First, create a insert-data.sql file as shown below.
# vi insert-data.sql
insert into employee values(101,'John Smith','CEO');
insert into employee values(102,'Raj Reddy','Sysadmin');
insert into employee values(103,'Jason Bourne','Developer');
insert into employee values(104,'Jane Smith','Sale Manager');
insert into employee values(105,'Rita Patel','DBA');
insert into department values(1,'Sales','Los Angeles');
insert into department values(2,'Technology','San Jose');
insert into department values(3,'Marketing','Los Angeles');
The following will execute all the commands from the insert-data.sql in the company.db database
# sqlite3 company.db < insert-data.sql
3. View Records
Once you’ve inserted the records, view it using select command as shown below.
# sqlite3 company.db
sqlite> select * from employee;
101|John Smith|CEO
102|Raj Reddy|Sysadmin
103|Jason Bourne|Developer
104|Jane Smith|Sale Manager
105|Rita Patel|DBA
sqlite> select * from department;
1|Sales|Los Angeles
2|Technology|San Jose
3|Marketing|Los Angeles
4. Rename a Table
The following example renames department table to dept using the alter table command.
sqlite> alter table department rename to dept;
5. Add a Column to an Existing Table
The following examples adds deptid column to the existing employee table;
sqlite> alter table employee add column deptid integer;
Update the department id for the employees using update command as shown below.
update employee set deptid=3 where empid=101;
update employee set deptid=2 where empid=102;
update employee set deptid=2 where empid=103;
update employee set deptid=1 where empid=104;
update employee set deptid=2 where empid=105;
Verify that the deptid is updated properly in the employee table.
sqlite> select * from employee;
101|John Smith|CEO|3
102|Raj Reddy|Sysadmin|2
103|Jason Bourne|Developer|2
104|Jane Smith|Sale Manager|1
105|Rita Patel|DBA|2
6. View all Tables in a Database
Execute the following command to view all the tables in the current database. The folowing example shows that there are two tables in the current database.
sqlite> .tables dept employee
7. Create an Index
The following example creates an unique index called empidx on the empid field of employee table.
sqlite> create unique index empidx on employee(empid);
Once an unique index is created, if you try to add another record with an empid that already exists, you’ll get an error as shown below.
sqlite> insert into employee values (101,'James Bond','Secret Agent',1);
Error: constraint failed
8. Create a Trigger
For this example, first add a date column called “updatedon” on employee table.
sqlite> alter table employee add column updatedon date;
Next, create a file that has the trigger definition. The following trigger will update the “updatedon” date column with the current timestamp whenever you perform an update on this table.
# vi employee_update_trg.sql
create trigger employee_update_trg after update on employee
begin
update employee set updatedon = datetime('NOW') where rowid = new.rowid;
end;
Create the trigger on the company.db database as shown below.
# sqlite3 company.db < employee_update_trg.sql
Now anytime you update any record in the employee table, the “updatedon” date column will be updated with the current timestamp as shown below. The following example updates the “updatedon” timestamp for empid 104 through trigger.
# sqlite3 company.db
sqlite> update employee set title='Sales Manager' where empid=104;
sqlite> select * from employee;
101|John Smith|CEO|3|
102|Raj Reddy|Sysadmin|2|
103|Jason Bourne|Developer|2|
104|Jane Smith|Sales Manager|1|2012-09-15 18:29:28 105|Rita Patel|DBA|2|
9. Create a View
The following example creates a view called “empdept”, which combines fields from both employee and dept table.
sqlite> create view empdept as select empid, e.name, title, d.name, location from employee e, dept d where e.deptid = d.deptid;
Now you can execute select command on this view just like a regular table.
sqlite> select * from empdept;
101|John Smith|CEO|Marketing|Los Angeles
102|Raj Reddy|Sysadmin|Technology|San Jose
103|Jason Bourne|Developer|Technology|San Jose
104|Jane Smith|Sales Manager|Sales|Los Angeles
105|Rita Patel|DBA|Technology|San Jose
After creating a view, if you execute .tables, you’ll also see the view name along with the tables.
sqlite> .tables
deptempdept employee
10. SQLite Savepoint, Rollback, Commit
Currently dept table has the following 3 records.
sqlite> select * from dept;
1|Sales|Los Angeles
2|Technology|San Jose
3|Marketing|Los Angeles
Now, create a savepoint called “major”, and perform some transactions on the dept table. As you see below, we’ve added two records, deleted one record, after creating a savepoint called “major”.
sqlite> savepoint major;
sqlite> insert into dept values(4,'HR','Los Angeles');
sqlite> insert into dept values(5,'Finance','San Jose');
sqlite> delete from dept where deptid=1;
sqlite> select * from dept;
2|Technology|San Jose
3|Marketing|Los Angeles
4|HR|Los Angeles
5|Finance|San Jose
Now for some reason, if we don’t want the above transactions, we can rollback the changes to a particular savepoint. In this example, we are rolling back all the changes we’ve made after the “major” savepoint.
sqlite> rollback to savepoint major;
sqlite> select * from dept;
1|Sales|Los Angeles
2|Technology|San Jose
3|Marketing|Los Angeles
If you don’t want your savepoints anymore, you can erase it using release command.
sqlite> release savepoint major;
11. Additional Date Functions
By default, the date columns values displayed in UTC time. To display in the local time, use the datetime command on the date column as shown below.
sqlite> select empid,datetime(updatedon,'localtime') from employee;
104|2012-09-15 11:29:28
You can also use strftime to display the date column in various output.
sqlite> select empid,strftime('%d-%m-%Y %w %W',updatedon) from employee;
104|19-09-2012 3 38
The following are the possible modifers you can use in the strftime function.
- %d day of month: 00
- %f fractional seconds: SS.SSS
- %H hour: 00-24
- %j day of year: 001-366
- %J Julian day number
- %m month: 01-12
- %M minute: 00-59
- %s seconds since 1970-01-01
- %S seconds: 00-59
- %w day of week 0-6 with Sunday==0
- %W week of year: 00-53
- %Y year: 0000-9999
- %% %
12. Dropping Objects
You can drop all the above created objects using the appropriate drop command as shown below.
Since we are dropping objects for testing purpose, copy the company.db to a test.db and try these commands on the test.db
# cp company.db test.db #
sqlite3 test.db
sqlite> .tables deptempdept employee
sqlite> drop index empidx;
sqlite> drop trigger employee_update_trg;
sqlite> drop view empdept; sqlite>
drop table employee;
sqlite> drop table dept;
All the tables and views from the test.db are now deleted.
sqlite> .tables
sqlite>
Note: When you drop a table all the indexes and triggers for that table are also dropped.
13. Operators
The following are the possible operators you can use in SQL statements.
- ||
- * / %
- + -
- << >> & |
- < >=
- = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP
- AND OR
For example:
sqlite> select * from employee where empid >= 102 and empid select * from dept where location like 'Los%';
1|Sales|Los Angeles
3|Marketing|Los Angeles
14. Explain Query Plan
Execute “explain query plan”, to get information about the table that is getting used in a query or view. This is very helpful when you are debugging a complex query with multiple joins on several tables.
sqlite> explain query plan select * from empdept; 0|0|TABLE employee AS e 1|1|TABLE dept AS d
For a detailed trace, just execute “explain” followed by the query to get more performance data on the query. This is helpful for debugging purpose when the query is slow.
sqlite> explain select empid,strftime('%d-%m-%Y %w %W',updatedon) from employee;
0|Trace|0|0|0||00|
1|Goto|0|12|0||00|
2|OpenRead|0|2|0|4|00|
3|Rewind|0|10|0||00|
4|Column|0|0|1||00|
5|String8|0|3|0|%d-%m-%Y %w %W|00|
6|Column|0|3|4||00|
7|Function|1|3|2|strftime(-1)|02|
8|ResultRow|1|2|0||00|
9|Next|0|4|0||01|
10|Close|0|0|0||00|
11|Halt|0|0|0||00|
12|Transaction|0|0|0||00|
13|VerifyCookie|0|19|0||00|
14|TableLock|0|2|0|employee|00|
15|Goto|0|2|0||00|
15. Attach and Detach Database
When you have multiple database, you can use attach command to execute queries across database.
For example, if you have two database that has the same table name with different data, you can create a union query across the database to view the combined records as explained below.
In this example, we have two company database (company1.db and company2.db). From the sqlite prompt, attach both these database by giving alias as c1 and c2 as shown below.
# sqlite3 sqlite> attach database 'company1.db' as c1;
sqlite> attach database 'company2.db' as c2;
Execute “.database” command which will display all the attached databases.
sqlite> .database
seq name file
--- --------------- ------------------
0 main
2 c1 /root/company1.db
3 c2 /root/company2.db
Now, you can execute a union query across these databases to combine the results.
sqlite> select empid, name, title from c1.employee union select empid, name, title from c2.employee;
101|John Smith|CEO
102|Raj Reddy|Sysadmin
103|Jason Bourne|Developer
104|Jane Smith|Sales Manager
105|Rita Patel|DBA
201|James Bond|Secret Agent
202|Spider Man|Action Hero
After attaching a database, from the current sqlite session, if you want to detach it, use detach command as shown below.
sqlite> detach c1;
sqlite> .database
seq name file
--- --------------- -----------------
0 main
2 c2 /root/company2.db
15条SQLite3语句的更多相关文章
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
- sql执行万条update语句优化
几个月没有更新笔记了,最近遇到一个坑爹的问题,顺道记录一下.. 需求是这样的:一次性修改上万条数据库. 项目是用MVC+linq的. 本来想着用 直接where() 1 var latentCusto ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?
假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么? 在执行这条语句的过程中,保存在result中的值被读 ...
- 一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t
在学习oracle 过程当中,当在看tables时,比如STUDENT,右击——查看——查询,会自动有这样的一条查询语句: select t.*, t.rowid from STUDENT_TJB t ...
- 关联映射、关联查询【重点掌握一条SQL语句的那种方法】
1 什么叫关联映射 通过数据库对象之间的关联关系(一对一.一对多.多对多),反映到实体对象上之间的引用. 举例 用户实体类(User):user_id user_name user_token 笔记本 ...
- 用一条mysql语句插入多条数据
这篇文章主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助 假如有一个数据表A: id name title addtime 如果需要插入n条数 ...
- TPCH 22条SQL语句分析
使用TPC-H进行性能测试,需要有很多工作配合才能获得较高性能,如建立索引,表数据的合理分布(使用表空间和聚簇技术)等.本文从查询优化技术的角度,对TPC-H的22条查询语句和主流数据库执行每条语句对 ...
- MySQL中一条更新语句是如何执行的
1.创建表的语句和更新的语句 这个表的创建语句,这个表有一个主键ID和一个整型字段c: mysql> create table T(ID int primary key, c int); 如果要 ...
随机推荐
- k8s应用01-----入门实例
安装一个单机版的K8S 1.关闭防火墙firewalld2.安装etcd和kubernetesyum install -y etcd kubernetes(会自动安装docker)3.修改配置文件修改 ...
- Docker-----关于dockerfile
docker build参数说明 --no-cache :创建镜像的过程不使用缓存: --force-rm :设置镜像过程中删除中间容器: --network=host:容器会使用宿主机的网络,容器与 ...
- OpenCL Workshop 1 —— 数字音频滤波
Introduction 这两年深度学习大火,Cuda跟着吃红利,OpenCL发展也很快.虽然OpenCL不是事实上的标准,但是作为开放标准,适应性是很强的,除了显卡之外,CPU/FPGA上都可以执行 ...
- ossfs挂载oss到ECS本地并设置权限
下载ossfs wget https://github.com/aliyun/ossfs/releases/download/v1.80.2/ossfs_1.80.2_ubuntu16.04_amd6 ...
- [Ubuntu]18终止程序运行
方法: 一.使用命令 killall (使用方便,但要知道卡死应用程序的名称) 二.使用 gnome-system-monitor (不知道卡死应用程序的名称,也可以慢慢找出) 操作步骤: step ...
- [Ubuntu]18安装百度网盘
1.下载客户端 下载地址: 选择linux版本,我选择的是deb格式,下载就可以了. 2.安装 进入下载目录,点击右键,选择在终端打开. 之后输入 以下代码愉快的安装就好了 注意:dpkg后面跟的文 ...
- java数据结构之自定义队列
一.队列的特点 1.队列是线性结构 2.先进先出,先进入队列的排在队列前端,会比后进队列的先出队列.FIFO 二.通过数组来实现队列 //自己实现数组队列,队列的特定就是先进先出 public cla ...
- git合并时忽略某个文件
因为开发现场跟部署的环境不同,有很多ip地址每次都要改来改去;于是开两个分支master(用来保存部署现场的ip)和dev(开发环境的ip),开发功能时在dev分支,然后使用master合并,每个分支 ...
- maven——将jar安装到本地仓库
环境变量MAVEN_HOME配置正确后,cmd窗口执行此命令: mvn install:install-file -Dfile=C:\hehe.jar -DgroupId=com.rockontro ...
- 多版本YUM仓库搭建
服务器:CentOS7 YUM源:阿里云 空间要求:CentOS6+CentOS7 50G,考虑后期更新预留,LVS空间100G 1.在服务器配置CentOS7的yum源和CentOS6的yum源 ...