sqlite常用的命令-增删改查

一、查看版本信息:

#sqlite3 -version

二、sqlite3常用命令

2、输出帮助信息:

sqlite> .help
.bail ON|OFF           Stop after hitting an error.  Default OFF
.databases             List names and files of attached databases
.dump ?TABLE? ...      Dump the database in an SQL text format
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ON|OFF        Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices TABLE         Show names of all indices on TABLE
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         csv      Comma-separated values
                         column   Left-aligned columns.  (See .width)
                         html     HTML <table> code
                         insert   SQL insert statements for TABLE
                         line     One value per line
                         list     Values delimited by .separator string
                         tabs     Tab-separated values
                         tcl      TCL list elements
.nullvalue STRING      Print STRING in place of NULL values
.output FILENAME       Send output to FILENAME
.output stdout         Send output to the screen
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.schema ?TABLE?        Show the CREATE statements
.separator STRING      Change separator used by output mode and .import
.show                  Show the current values for various settings
.tables ?PATTERN?      List names of tables matching a LIKE pattern
.timeout MS            Try opening locked tables for MS milliseconds
.timer ON|OFF          Turn the CPU timer measurement on or off
.width NUM NUM ...     Set column widths for "column" mode

3、查看数据库文件信息命令(注意命令前带字符'.'):

sqlite>.database

4、退出sqlite终端命令:

sqlite>.quit

或

sqlite>.exit

列出当前显示格式的配置:

sqlite> .show 
     echo: off
  explain: off
  headers: off
     mode: list
nullvalue: ""
   output: stdout
separator: "|"
    width: 

6、显示数据库结构:

显示表的结构:.schema    表名

其实就是一些 SQL 语句,他们描述了数据库的结构

 

7、导出某个表的数据: .dump    表名

sqlite> .dump UserGroup 
BEGIN TRANSACTION;
CREATE TABLE UserGroup(
    GroupId            int               not null,
    GroupName          varchar(32)      not null,
    PassMinLength      int               default 6,
    StrongPassword     int               default 0, --0-no 1-letter and number 2-up low case and num
    PassLifecycle      int               default 90, --day
    SamePassBefore     int               default 3,
    FailRetry          int               default 3,
    LockScreen         int               default 15, --minute
    Permission         int               default 0, --0-viewonly 1-modify 777-super
    LogPermission      int               default 777, --add by pangm 101208 --0-noneOperate 1-viewonly 777-view&delete
    primary key(GroupId)
);
INSERT INTO "UserGroup" VALUES(0,'超级管理员',6,2,0,0,0,15,777,777);
INSERT INTO "UserGroup" VALUES(1,'管理员',6,1,90,5,3,10,0,777);
INSERT INTO "UserGroup" VALUES(2,'普通用户',6,1,90,5,3,10,0,1);
COMMIT;

 

8、设置导出目标: 

.output     文件名  

或者

.output   stdout

先运行 .output cars.sql ,然后再运行 .dump 命令试试看?如果要回复成导出到终端(标准输出),则运行 .output stdout

8、设置导出目标: 

.output     文件名  

或者

.output   stdout

先运行 .output cars.sql ,然后再运行 .dump 命令试试看?如果要回复成导出到终端(标准输出),则运行 .output stdout

 

10、设置分隔符:.separator    分隔符

我们可以首先运行 SELECT * FROM Cars; ,可以看到默认的分隔符是 | 

运行.separator : 以后,再 SELECT * FROM Cars;,可以看到分隔符已经变成 : 了

 

11、显示标题栏:.headers   on

 

12、设置显示模式:.mode    模式

有好几种显示模式,默认的是 list 显示模式,一般我们使用 column 显示模式,还有其他几种显示模式可以 .help 看 mode 相关内容。看看下面的图,和上面是不是显示的不一样了?

 

 

13、设置 NULL 值显示成什么样子: .nullvalue     你想要的NULL值格式

默认情况下NULL值什么也不显示,你可以设置成你自己想要的样子

 

14、配置文件 .sqliterc

如果我们每次进入命令行都要重新设置显示格式,很麻烦,其实 .show 命令列出的所有设置项都可以保存到一个 .sqliterc 文件中,这样每次进入命令行就自动设置好了。.sqlterc 文件在 Linux 下保存在用户的 Home 目录下,在 Windows 下可以保存到任何目录下,但是需要设置环境变量让数据库引擎能找到它,感兴趣的可以看看帮助。 

 

 

三、数据库和表的相关命令

 

1、创建一个新的数据库:sqlite3     文件名

创建一个 test.db 数据库文件,打开控制台窗口,命令如下:

sqlite>sqlite3 test.db

 

2、打开一个已经存在的数据库:sqlite3 已经存在的文件名

创建一个新数据库和打开一个已经存在的数据库命令是一模一样的,如果文件在当前目录下不存在,则新建;如果存在,则打开。

 

3、建立数据表

create table table_name(field1 type1, field2 type1, ...);

table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
如:该语句创建一个记录学生信息的数据表。

sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。

 

4、添加数据记录

insert into table_name(列field1, field2, ...) values(值val1, val2, ...);

valx为需要存入字段的值。
例,往老师信息表添加数据:

很简单,创建了一个 Teachers 表并向其中添加了四条数据,设定了一些约束,其中有自动增加的主键、默认值等等。

 

5、修改数据

UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】

UPDATE 语句用来更新表中的某个列,如果不设定条件,则所有记录的这一列都被更新; 如果设定了条件,则符合条件的记录的这一列被更新, WHERE 子句被用来设定条件,如下例:

 

6、删除数据 DELETE FROM 表 【WHERE 条件语句】

如果设定 WHERE 条件子句,则删除符合条件的数据记录;如果没有设定条件语句,则删除所有记录

 

 

7、导入数据:.read     数据文件

打开记事本,并将下列 SQL 语句复制到记事本中,保存为 test.sql ,在命令行环境中输入

.read   test.sql

即将所有的数据导入到 test.db 数据库中。

 

BEGIN TRANSACTION;
CREATE TABLE Cars(Id integer PRIMARY KEY, Name text, Cost integer);
INSERT INTO Cars VALUES(1,'Audi',52642);
INSERT INTO Cars VALUES(2,'Mercedes',57127);
INSERT INTO Cars VALUES(3,'Skoda',9000);
INSERT INTO Cars VALUES(4,'Volvo',29000);
INSERT INTO Cars VALUES(5,'Bentley',350000);
INSERT INTO Cars VALUES(6,'Citroen',21000);
INSERT INTO Cars VALUES(7,'Hummer',41400);
INSERT INTO Cars VALUES(8,'Volkswagen',21600);
COMMIT;

BEGIN TRANSACTION;
CREATE TABLE Orders(Id integer PRIMARY KEY, OrderPrice integer CHECK(OrderPrice>0), 
                    Customer text);
INSERT INTO Orders(OrderPrice, Customer) VALUES(1200, "Williamson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(200, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(40, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(1640, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(100, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(50, "Williamson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(150, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(250, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(840, "Brown");
INSERT INTO Orders(OrderPrice, Customer) VALUES(440, "Black");
INSERT INTO Orders(OrderPrice, Customer) VALUES(20, "Brown");
COMMIT;

8、查询数据记录

a查询输出所有数据记录
select * from table_name;

 

b限制输出数据记录数量

若数据库中的数据太多,全部返回可不行,可以限制返回的数量,还可以设定返回的起始位置
select * from table_name limit val;

 

c升序输出数据记录
select * from table_name order by field asc;

 

d降序输出数据记录
select * from table_name order by field desc;

 

e条件查询
select * from table_name where expression;

 

IN (集合)
select * from table_name where field in ('val1', 'val2', 'val3');

 

BETWEEN 值1 AND 值2
select * from table_name where field between val1 and val2;

f、查询记录数目

select count (*) from table_name;

 

g、区分列数据
select distinct field from table_name;
有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。

h、别名 SELECT 列 AS 别名,列 AS 别名 FROM

可以给返回数据集中的某些列起一个比较直观的名字,比如把 Cost 改为"Price Of Car"

 

I、条件查询 SELECT 列 FROM 表 【WHERE 条件语句】

一般的条件语句都是大于、小于、等于之类的,这里有几个特别的条件语句

LIKE

------------------------------

LIKE 用通配符匹配字符串

下划线 _ 匹配一个字符串

百分号 % 匹配多个字符串

LIKE 匹配字符串时不区分大小写

 

GLOB

 

J 区分 DISTINCT 列

有一些字段的值可能会出现重复,比如订单表中,一个客户可能会有好几份订单,因此客户的名字会重复出现。

到底有哪些客户下了订单呢?下面的语句将客户名字区分出来。

 

k分组 GROUP BY 列

分组和前面的区分有一点类似。区分仅仅是为了去掉重复项,而分组是为了对各类不同项进行统计计算。

比如上面的例子,我们区分出 5 个客户,这 5 个客户一共下了 11 个订单,说明很多客户都下了不止一个订单。

下面的语句统计每个客户在订单上总共花费了多少钱。

这里 Sum 是 SQLite 内置的统计函数,在这个例子中用来求每个顾客的订单价格的和。

统计结果也可以设定返回条件,但是不能用 WHERE 子句,而是用 HAVING 子句,如下例,返回订单总额大于 1000 的顾客。

 

9、建立索引
当说数据表存在大量记录,索引有助于加快查找数据表速度。
create index index_name on table_name(field);
例,针对学生表stu_no字段,建立一个索引:
create index student_index on student_table(stu_no);
建立完成后,sqlite3在对该字段查询时,会自动使用该索引。
 
10、删除数据表或索引
drop table table_name;
drop index index_name;

 

四、sqlite3存储数据的类型
NULL:标识一个NULL值
INTERGER:整数类型
REAL:浮点数
TEXT:字符串
BLOB:二进制数

 

五、sqlite3存储数据的约束条件
Sqlite常用约束条件如下:
PRIMARY KEY - 主键:
1)主键的值必须唯一,用于标识每一条记录,如学生的学号
2)主键同时也是一个索引,通过主键查找记录速度较快
3)主键如果是整数类型,该列的值可以自动增长
NOT NULL - 非空:
约束列记录不能为空,否则报错
UNIQUE - 唯一:
除主键外,约束其他列的数据的值唯一
CHECK - 条件检查:
约束该列的值必须符合条件才可存入
DEFAULT - 默认值:
列数据中的值基本都是一样的,这样的字段列可设为默认值

 

CREATE TABLE Orders(Id integer PRIMARY KEY, OrderPrice integer CHECK(OrderPrice>0), 
                    Customer text);

CREATE TABLE Friends(Id integer PRIMARY KEY, Name text UNIQUE NOT NULL, 
                     Sex text CHECK(Sex IN ('M', 'F')));

 

CREATE TABLE IF NOT EXISTS Reservations(Id integer PRIMARY KEY, 
                                        CustomerId integer, Day text);
INSERT INTO Reservations(CustomerId, Day) VALUES(1, '2009-22-11');

CREATE TABLE Books(Id integer PRIMARY KEY, Title text, Author text, 
                   Isbn text default 'not available');

 怎么在已经创建的表中插入一列

ALTER  TABLE   table-name 
 ADD COLUMN  column-name column-type

 

posted @ 2020-07-03 12:22  星火撩原  阅读(442)  评论(0编辑  收藏  举报