美文网首页
玩转SQLite数据库

玩转SQLite数据库

作者: LuisX | 来源:发表于2018-04-18 10:33 被阅读186次

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

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


    一、表(Table)

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

    • 每一行 (row) 称为一条数据。
    • 每一条数据,可由一列 (field) 以上的数据组成。
    • 数据库中,每个表的名字唯一。
    • 数据库中,可以拥有多个表。

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

    personal表

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

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

    • 1.将数据分门别类。
    • 2.为了数据不重复。

    1.1 遵守正规化

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

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

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

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

    • city 只需填上适当的城市编号。
    • city 字段类型由字符串转换成数字类型。
    • 大幅减少,对数据存储空间的需求。
    • 大幅减少,人工输入数据产生的错误。

    拆分后

    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
    

    相关文章

      网友评论

          本文标题:玩转SQLite数据库

          本文链接:https://www.haomeiwen.com/subject/sdfvkftx.html