iOS开发sqlite终端输入指令

释放双眼,带上耳机,听听看~!

看了大牛的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动态库中的外键功能是关闭的,如果要使用该动态库,需要重新编译该库,并打开编译控开关。

 

人已赞赏
iOS文章

iOS开发AFNetWorking 的同步,异步请求方法

2020-5-6 10:48:04

iOS文章

iOS开发FMDB数据库总结

2020-5-6 12:03:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索