看了大牛的SQLite文档,自己又整理了一下,留着以后看,希望对大家也能有所帮助。
整理的sqlite3终端输入的一些简单指令,SQL语言大致分为三类 :
数据定义语言 (DDL)
- CREATE (创建数据库)
- ALTER TABLE (修改数据库)
- DROP (删除数据库)
数据操作语言(DML)
- INSERT
- UPDATE
- DELETE
数据查询语言(DQL)
- SELECT
SQLite数据库操作
DDL
创建表(CREATE)
CREATE TABLE IF NOT EXISTS Students(ID integer, Name text, Age integer);
修改表(ALTER TABLE)
将Students表改名为Teachers
ALTER TABLE Students RENAME TO Teachers;
向Teachers表的结构中增加一个Sex列
ALTER TABLE Teachers ADD COLUMN Sex text;
删除表(DROP TABLE)
DROP TABLE Teachers;
DML
插入信息(INSERT INTO)
向Teachers表中插入一条记录
INSERT INTO Teachers(id, name, age) values(0,'ss',30);
删除记录(DELETE FROME)
从Teachers表中删除指定条件的记录
DELETE FROM Teachers WHERE name = 'ss'; //删除名字为ss的这条记录
修改记录(UPDATE)
更改Teachers表中的指定记录的指定字段
UPDATE Teachers SET age = 45, name = 'was' WHERE ID = 0;
DQL
查询记录(SELECT)
查询Teachers表中指定字段、指定条件的记录
SELECT * FROM Teachers; //查询Teachers表里的所有数据;
SELECT name,age FROM Teachers; //查询Teachers表里所有的名字 和年龄;
SELECT name,age FROM Teachers WHERE ID !=0; //查询Teachers表里除id= 0外的所有名字和年龄;
//其他的操作自己在摸索下,很简单的。
计算记录的数量(COUNT())
查询Teachers表中,年龄>27的记录的数量
SELECT count(Name) FROM Teachers WHERE age > 27; //查询年龄大于27的人有几个;
SELECT count(*) FROM Teachers WHERE age > 27; //查询年龄大于27的记录有几条,和上一条查询语句的功能一样;
查询Teachers表中,名字是wss的人有几个
SELECT count(Name) FROM Teachers WHERE name = 'was'; //查询名字是wss的名字有几个;
//其他的数量查询操作自己可以试下。
排序(ORDER BY)
查询出来的记录可以用ORDER BY 来根据字段进行排序
SELECT * FROM Teachers ORDER BY age;
默认是按照升序(有小到大),也可以改为降序
SELECT * FROM Teachers ORDER BY age ASC //升序
SELECT * FROM Teachers ORDER BY age DESC //降序可以在一个字段的基础上,叠加字段进行排序
先按照年龄的升序排序,年龄相同的再按照名字的降序排序
SELECT * FROM Teachers ORDER BY age,name DESC;
限制查询记录数(LIMIT)
从第3条开始查,查询显示5条记录
SELECT * FROM Teachers LIMIT 3, 5;
约束 (Constraints)
SQL的部分字段可能会有约束:
年龄 - 大于20岁。如果你想录入小于20岁的教师,系统会报错
国籍 - 默认中国。所谓默认,就是如果你不填写,系统会自动天上默认值
姓名 - 不能为空。如果不填,会报错
员工号 - 唯一。如果重复,会报错
//上面提到的大于、默认、不能为空、唯一等,就是数据的约束条件。在用CREATE TABLE 创建表的时候,就应该将每个字段列的约束条件事先说明,以后再往表里输入数据的时候,系统会自动帮我们检查是否满足约束条件,如果不满足,系统会报错。
SQL的常见约束:
- NOT NULL 非空
- UNIQUE 唯一
- PRIMARY KEY 主键
- FOREIGN KEY 外键
- CHECK 条件检查
- DEFAULT 默认
主键
CREATE TABLE IF NOT EXISTS Teachers(ID integer PRIMARY KEY, Name text);
- 数据表中每一条记录都有一个主键,这就像我们每个人的身份证号码、员工号;也就是说每一个主键对应一条数据记录。所以,主键必须是唯一的
- 一般情况下主键同时也是一个索引,所以通过主键查找记录速度比较快
- 在关系型数据库中,一个个表的主键可以作为另一个表的外键,这样,这两个表之间就通过这个键建立了关系
- 主键一般是整数或者字符串,只要保证唯一就行,在SQLite中,主键如果是整数类型,该值可以自动增长
默认值(DEFAULT)
有些字段,在每条记录中,值都一样,只有在个别情况下才需要更改,可以给这些字段设置默认值
CREATE TABLE IF NOT EXISTS Teachers(ID integer PRIMARY KEY, Name text, Contury text DEFAULT '中国');
INSERT INTO Teachers(Name) VALUES('wss');
INSERT INTO Teachers(Name) VALUES('wyy');
INSERT INTO Teachers(Name,Contury) VALUES('sf', '美国');
非空(NOT NULL)
有些字段,可能一时不知道填什么值,并且也没有默认值。当添加数据时,这些字段空置不填,系统会认为是NULL
但是另有一些字段,必须填值,如果不填就会出错,这样的字段被称为非空(NOT NULL)字段,需要在定义表的时候事先声明
CREATE TABLE IF NOT EXISTS Teachers(ID integer PRIMARY KEY, Name text NOT NULL, desc text, Contury text DEFAULT '中国')
//名字设置为必填,不然系统就报错,desc 不设置约束,不填也不会报错,国家不填的话默认是中国 。
唯一值(UNIQUE)
除了主键,可能也有字段的值不能重复,就需要用到UNIQUE约束了
CREATE TABLE IF NOT EXISTS Teachers(ID integer PRIMARY KEY, Name text UNIQUE, desc text, Contury text DEFAULT '中国')
//名字唯一,不能重复
条件查询(CHECK)
有些值必须符合一定的条件才允许存入,这就需要用到这个CHECK约束
CREATE TABLE IF NOT EXISTS Teachers(ID integer PRIMARY KEY, Name text NOT NULL,Age integer CHECK(Age> 20));
//年龄超过20的系统会报错
外键(FOREIGN KEY)
现在,我们的数据库里已经有Teachers表了,假如我们再建立一个Students表,要求Students表中的每一位学生都对应一个Teachers表中的教师。
很简单,只需要在Students表中建立一个TeachersID字段,保存对应教师的ID,这样,学生和老师之间就建立了关系。
问题是:有时候我们可能给学生存入一个不存在的Teachers表中的TeachersID值,而且发现不了这个错误!
在这种情况下,可以把Students表中的TeachersID字段声明为一个外键,让它的值对应到Teachers表的ID字段上。
这样,一旦在Students表中存入一个不存在的教师ID,系统就会报错。
CREATE TABLE IF NOT EXISTS Students(ID integer PRIMARY KEY, TeachersID integer, FOREIGN KEY(TeachersID) REFERENCES Teachers(ID));
//实际测试中,发现尽管设置了外键约束,依然可以添加不存在的TeachersID,原因是因为外键开关默认是关闭的,打开开关即可。
**PRAGMA foreign_keys = ON;
注意:
默认情况下,SQLite3动态库中的外键功能是关闭的,如果要使用该动态库,需要重新编译该库,并打开编译控开关。