玩转SQLite数据库

2018-04-18  本文已影响186人  LuisX

Mac OS 与 iOS 已经内置了 SQLite 数据库引擎,想要 App 具备访问数据库的能力,只需要在项目中的 Framework 加入 libsqlite3.dylib 函数库。

下面来介绍一下,数据库的相关概念


一、表(Table)

所有在数据库中存储的数据都是放在表中的。

注意:
表名、字段名,尽量以英文命名。

personal表

id cname city tel
A01 小明 北京市 11111
A02 小强 上海市 22222
A03 小刚 北京市 33333

数据库中,有很多表的原因:


1.1 遵守正规化

因数据重复性的问题,将表由一个拆成好几个的操作称为“正规化”。

数据库的设计,务必要让每个表遵守第一正规化,防止数据库在未来,维护、扩充、查询、修改操作上出现问题,导致数据库发展陷入瓶颈

第一正规化: 某条数据的某个字段,只能存放一份数据。

因此,新增一个 city_info 表,每个城市取唯一识别编号。

拆分后

personal表

id cname city tel
A01 小明 1 11111
A02 小强 5 22222
A03 小刚 1 33333

city_info表

city_id name
1 北京市
2 南京市
3 天津市
4 重庆市
5 上海市

1.2 不要遵守所有的正规化

A01 和 小明 变得重复,为了解决新产生的重复性问题,需要将personal拆成两个表。

personal表

id cname city tel
A01 小明 1 11111
A01 小明 3 66666
A02 小强 5 22222
A03 小刚 1 33333

拆分后

personal表

id cname
A01 小明
A02 小强
A03 小刚

residence表

id city_id tel
A01 1 11111
A01 3 66666
A02 5 22222
A03 1 33333

city_info表

city_id name
1 北京市
2 南京市
3 天津市
4 重庆市
5 上海市

注意:
在实际应用中,不要让数据分散得太细,数据分得太细,在操作上会变得很麻烦。


二、主键(Primary Key 或 PK)

指定某些字段的值,不可以重复,这些字段被称为“主键”。
给每条数据一个唯一识别值,让数据输出、查询时不会出错。
主键也称之为“主索引”。

三个表的主键

personal表 residence表 city_info表
id idcity_id(复合主键) city_id

注意:
residence表中的主键,包含了 id 和 city_id 两个字段,它是复合字段主键。
任何一个字段的数据都有可能重复,但是合起来数据是不重复的。


三、关联

表与表之间因某些字段,彼此相互关联着,让分散的数据可以串在一起,互相找到。

personal表、residence表,id字段的值 代表意义相同。
residence表、city_info表,city_id字段的值 代表意义相同。


SQL语法

四、常用SQL语法

SQL语法,是用来操作数据库的标准命令,现今的数据库几乎都支持SQL语法。
(不同数据库,某些命令会有一些差异)

SQL语法的两部分:

注意:
SQL语句无大小写之分,字符串后使用单引号。

4.1 查询

// 1.查询,表内所有数据

SELECT * FROM personal
// 2.查询,表内指定数据

SELECT * FROM personal WHERE cname = '小明'
// 3.查询,表内搜索列数据,并排序( ASC | DESC )

SELECT * FROM personal WHERE cname LIKE '小%' ORDER BY id
// 4.查询,多个表内指定数据

SELECT personal.id, city_info.name, residence.tel 
FROM personal, residence, city_info 
WHERE personal.id = residence.id AND residence.city_id = city_info.city_id AND cname = '小明'
// 5.查询,表内数据记录数

SELECT COUNT(*) AS n FROM city_info

两个表之间,连接方式:

连接方式 描述 说明
内连接 指定两个表之间的连接关系 “WHERE * = *” 常用
左侧外链接 “=” 左边数据多 非常重要
右侧外链接 “=” 右边数据多 非常重要
交叉链接 不指定两个表之间的连接关系 几乎不用

注意:
很多错误,是由于忘记使用外链接,造成查询结果数据不见了。

/*
错误示例:
当personal表的id,在residence表中找不到时,查询结果会有丢失。

SELECT personal.id, cname, tel
FROM personal, residence
WHERE personal.id = residence.id
*/

// 6.外连接(左侧外链接)

SELECT personal.id, cname, tel
FROM personal LEFT JOIN residence ON personal.id = residence.id
// 7.交叉链接(几乎不会用到)

SELECT personal.id, cname, tel
FROM personal, residence

4.2 插入

// 1.非指定字段,插入 (VALUES中按字段顺序,空字段填NULL)

INSERT INTO personal VALUES ('A05', '小花')
// 2.指定字段,插入

INSERT INTO personal (id, cname) VALUES ('A05', '小花')

4.3 修改

// 1.修改,表内指定数据

UPDATE personal SET cname = '小毛' WHERE id = 'A03'
// 2.修改,表内相关数据

UPDATE personal SET id = 'A06', cname = '小胖' WHERE id = 'A05'

4.4 删除

// 1.删除,表内指定数据

DELETE FROM personal WHERE cname = '小虎'
// 2.删除,表内所有数据

DELETE FROM residence
上一篇下一篇

猜你喜欢

热点阅读