Sqlite3 test.db — 创建数据库 sqlite3 test.db .dump > test.sql — .dump 点命令来导出完整的数据库在一个文本文件中 sqlite3 test.db < test.sql — 从生成的 test.sql 恢复 ———————————————————————— 所有的点命令只在 SQLite命令行中可用 sqlite_master ———————————————————————— 在命令行中打开一个已存在的数据库 .open /Users/zhangzhennan/test.db ———————————————————————— 列出所有数据库中的表 .tables SELECT tbl_name FROM sqlite_master WHERE type = 'table'; 列出表信息 .schema wp_posts select sql from sqlite_master where type='table' and tbl_name = 'wp_posts' ———————————————————————— Insert 语句 import sqlite3; connect = sqlite3.connect('/Users/xxx/test.db'); print('connection successful') c = connect.cursor(); c.execute(''' INSERT INTO wp_posts (post_title,post_content)\ VALUES ('我是一个标题', '我是一段内容') ''') c.close() connect.commit() connect.close() ———————————————————————— 无法删除列的变通方法 (使用一个表来填充另一个表) ALTER TABLE wp_posts RENAME TO wp_posts_back;//先将表重命名 CREATE TABLE wp_posts( id INTEGER PRIMARY KEY AUTOINCREMENT, post_title CHAR(150), post_content TEXT ); //重新创建表 INSERT INTO wp_posts (post_title, post_content) select post_title,post_content from wp_posts_back //将旧表的内容插入到新表中 DROP TABLE wp_posts_back; //删除旧表 ———————————————————————— Select 语句 sqlite> select * from wp_posts; Where 语句 sqlite> select * from wp_posts where id ==5; Update 语句 update wp_posts set post_title = '我要修改标题' where id in (9,11) // 修改 9 11 update wp_posts set post_title = '我要修改标题' where id between 9 and 11 // 修改9 10 11 Like 语句 百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符 select * from wp_posts where post_title like '%标'; // 以标结尾 select * from wp_posts where post_title like '标%'; // 以标开头 select * from wp_posts where post_title like ‘%标%’; // 有标的 glob 语句 与 LIKE 运算符不同的是,GLOB 是大小写敏感 星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符 Limit 语句 sqlite> select * from wp_posts limit 4 offset 2; // 从第二行开始取4行数据 Order by 语句 asc desc sqlite> select * from wp_posts order by id desc; // 根据某列可以多列进行升降序排列 group by GROUP BY 子句放在 WHERE 子句之后(如果有的话),放在 ORDER BY 子句之前 sqlite> select post_title,sum(post_content) from wp_posts group by post_title; aa|11 bb|77 cc|99 having 语句 WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件 sqlite> select post_title,sum(post_content) from wp_posts group by post_title having post_title == 'bb'; bb|77 Distinct 语句 去重复 sqlite> select distinct post_title from wp_posts; aa bb cc ———————————————————————— 约束 Not null、 default、 unique、 primary key 、check(约束确保某列中的所有值满足一定条件) CREATE TABLE wp_posts5( id INTEGER PRIMARY KEY AUTOINCREMENT, post_title CHAR(150) UNIQUE, post_content TEXT CHECK(LENGTH(post_content) > 0) // post_content字符长度必须大于0 ); ———————————————————————— Join 连接 cross join inner join outer join Cross join 返回被连接的两个表所有数据行的笛卡尔积,返回到的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 比如a表有5条数据,b表有3条数据,那么最后的结果有5*3=15条数据 sqlite> select * from wp_posts,wp_posts3; // 等同于下面sql sqlite> select * from wp_posts cross join wp_posts3; sqlite> select * from wp_posts 'wp1',wp_posts3 'wp3' where wp1.id = wp3.id; // 等同下面sql sqlite> select * from wp_posts cross join wp_posts3 where wp_posts.id = wp_posts3.id; Inner join 每个匹配对的列值会合并成一个结果行,在两张表进行连接查询时,只保留两张表中完全匹配的结果集 join(默认inner join) sqlite> select * from wp_posts 'wp1' join wp_posts3 'wp3' on wp1.id = wp3.id; 1|aa|11|1|我是一个标题|我是内容 如果两张表的关联字段名相同,也可以使用USING子句 sqlite> select * from wp_posts 'wp1' join wp_posts3 'wp3' using (id); 左外连接就是关联的两张或多张表中,根据关联条件,显示匹配的记录,左表中有的记录,但是右表中没有匹配上的,以空(null)显示。 LEFT OUTER JOIN也可以简写成LEFT JOIN,效果是一样的 ,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录 sqlite> select * from wp_posts3 left join wp_posts on wp_posts3.id == wp_posts.id; 1|我是一个标题|我是内容|1|aa|11 7|我是一个标题2|我是内容2||| Sqlite3 不支持 right join 、full join ———————————————————————— Union 合并两个或多个 SELECT 语句的结果,不返回任何重复的行 UNION ALL 不去重复 SELECT 被选择的列数必须是相同 sqlite> select * from wp_posts3 union select * from wp_posts4; ———————————————————————— Null 、is not null null和空白有区别的  As 别名 可以省略as ———————————————————————— Trigger 触发器 BEFORE 或 AFTER 关键字决定何时执行触发器动作 for each row 是操作语句每影响到一行的时候就触发一次,也就是删了 10 行就触发 10 次,而 for each state 一条操作语句就触发一次,有时没有被影响的行也执行。sqlite 只实现了 for each row 的触发 // 更新wp_posts4表中行的post_title则触发触发器 create trigger leyi after update of post_title on wp_posts4 begin insert into wp_posts5 (post_title,post_content) values ('在wp_posts4中更新了一条数据','如题'); end; // wp_posts4表中插入行时则触发触发器 create trigger hello after insert on wp_posts4 begin insert into wp_posts5 (post_title, post_content) values ('hello', 'world'); end;