一、iOS开发: SQLite入门

DDL语句(数据定义语句)

一、创建表格
  • 创建表格: create table 表名(字段1 字段类型 字段约束, 字段2 字段类型 字段约束, ......);
  • 字段类型 和 字段约束可以不写, 但是一般都会将字段类型写上, 用于提示开发者应该存储的字段类型
  • 例如 <a>create table t_stu(id integer primary key autoincrement, name text);</a>
  • 注意: 当调用上面蓝色的一段话后, 会创建一个表名为 t_stu 的sqlite表, 但是重复执行的时候, 就会报表格已经存在的错误, 我们在执行语句的时候可以没有效果, 但是一定不能有错误
  • 添加不存在才创建的语句是 <a>create table if not exists t_stu(id integer primary key autoincrement, name text);</a>
  • 意思就是: 如果t_stu表格不存在, 就创建一个t_stu表格, 如果存在, 就不在重复创建
二、删除表格
  • 删除表格: drop table 表名;
  • 例如: <a>drop table t_stu</a>
  • 意思是删除 表名为 t_stu的这个sqlite表
  • 防止重复删除的错误语句: <a>drop table if exists t_stu;</a>
三、修改表格
  • DDL语句中修改表格的语句只能实现部分功能: <a>修改表名</a>, <a>新增字段</a>
  • 修改表名: alter table 旧表名 rename to 新表名;
    • <a>alter table t_stu rename to t_student;</a>
    • 将 t_stu表 名字改为 t_student
  • 新增属性: alter table t_student add column 字段名 字段类型 字段约束;
    • <a>alter table t_student add column address text not null default 地址;</a>
    • 给 t_student表 添加一个 address字段, 类型text, 约束不能为空, 且默认值为 地址

sqlite中存储类 的 数据类型(字段类型)

  • null: 值是一个 NULL 值。
  • integer: 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
  • real: 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
  • text: 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
  • blob: 值是一个 blob 数据,完全根据它的输入存储。

sqlite中的常用约束

  • not null - 非空
  • unique - 唯一
  • primary ket - 主键
  • foreign key - 外键
  • check - 条件检查
  • default - 默认
  • autoincrement - 自动增加 (需要数据类型为integer)

DML语句(数据操作语句)

一、插入语句
  • insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
  • 例句: <a>insert into t_stu (name, age, score, num) values ('张三', 18, 60, 'jx0001');</a>
  • 注意: 插入数据时, text类型一定要使用单引号
二、更新语句
  • update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, ...
  • 例句: <a>update t_stu set name = '王小二', age = 19;</a>
  • 注意: 这一句执行后, 表中所有行的name和age对应的数据都会修改, 如果需要只改某一行的语句, 需要添加条件语句
二、删除语句: 操作记录, 即删除整行
  • delete from 表名;
  • 例句: <a>delete from t_stu;</a>
  • 注意: 上面这句, 会删除t_stu表中所有数据, 如果想要删除指定行, 需要添加条件语句

条件语句

一、示例
  • 现有sqlite表如下, 在这个基础上进行指定数据的操作:


    现有数据
  • 执行修改语句<a>update t_stu set name = '钱七', age = 21 where num = 'jx0002';</a>, 效果如下:


    修改后
    • 其中的<a>where num = 'jx0002'</a>就是条件语句: 指定num = 'jx0002'的语句
  • 执行删除语句: <a>delete from t_stu where age < 19 and score < 70;</a>, 效果如下:


    删除后
    • 删除 age < 19 并且 score < 70 的数据
  • 可以修改一个字段的值 等于 另一个字段的值: <a>update t_stu set score = age;</a>


    score = age
二、条件语句的常见格式
  • where 字段 = 某个值; (不能用==)
  • where 字段 is 某个值; (is 相当于 =)
  • where 字段 != 某个值;
  • where 字段 is not 某个值; (is not 相当于 !=)
  • where 字段 > 某个值;
  • where 字段 < 某个值;
  • where 字段1 = 某个值 and 字段2 = 某个值; (and 相当于C语言中的 &&)
  • where 字段1 = 某个值 or 字段2 = 某个值; (or 相当于C语言中的 ||)

DQL(数据查询语句)

一、基本操作
  • 基本语句: select 字段名 from 表名;
    • 例如 <a>select * from t_stu;</a>

    • *是通配符, 表示所有的字段


      基本查询
    • 查询指定字段: <a>select name, age from t_stu;</a>


      查询指定字段
    • 根据条件去查询 <a>select * from t_stu where age > 19;</a>


      根据条件去查询
二、统计查询
  • count(字段名): 值不为null的 该字段的个数, 字段名使用通配符值, 指的是数据行数

  • avg(字段名): 表中指定字段的平均数, 如果是字符串, 默认改值以0计算

  • sum(字段名): 表中指定字段的和

  • max(字段名): 表中指定字段中最大的那个值

  • min(字段名): 表中指定字段中最小的那个值

  • 执行语句<a>select count(age) from t_stu;</a>


    age字段有值的个数
三、排序查询
  • 格式 select 字段名 from 表名 order by 字段名 DESC;
  • ASC: 升序 DESC: 将序 $s默认是ASC
  • 例句: <a>select score from t_stu order by age DESC;</a>效果如下:


    查询score字段的值, 并根据age字段的值进行降序排序
    • 查询t_stu表中的所有score字段的值, 并根据age的值降序排列
  • 例句: <a>select * from t_stu order by age ASC, score DESC;</a>
  • 查询表中所有的字段值, 并根据age的值进行升序排列, 如果age有相同的值, 那么这些值根据score的值进行降序排列


    效果
四、分页查询
  • 格式: select 字段名 from t_stu limit 起点下标, 长度;

  • 例句: <a>select * from t_stu limit 0, 3;</a>

  • 现有数据如下:


    现有数据
  • 执行<a>select * from t_stu limit 0, 3;</a>结果:


    select * from t_stu limit 0, 3;
  • 执行<a>select * from t_stu limit 2, 2;</a>结果:


    select * from t_stu limit 2, 2;
  • 排序查询: <a>select * from t_stu order by score asc limit 2, 3;</a>


    赛选并排序
    • 根据score从小到大排序后, 在取下标2为起点的3条数据
  • 省略写法 <a>select * from t_stu limit 3;</a>

  • 默认下标为0开始, 取三条数据


    默认下标为0开始, 取三条数据
五、多表查询
  • 现有t_user表 和 t_duanzi表, 如下图:


    t_user

    t_duanzi
  • 现在同时查询两个表:

  • <a>select * from t_user, t_duanzi;</a>


    同时查询
  • 根据t_user的id 和 t_duanzi的userId相等时进行查询


    t_user的id 和 t_duanzi的userId相等
六、表名和字段名的别名
  • 查询指定字段:

    • <a>select t_user.id, t_user.name, t_duanzi.id, t_duanzi.name, content from t_user, t_duanzi where t_user.id = t_duanzi.userId;</a>
    • 上面语句中两个表去自己的字段时, 需要使用点语法, 如果表名很长就会显得很麻烦, 可以使用替换的方式, 在查询时将表名换一个名字
    • 表名的地方使用 as 来更换表名
    • <a>select u.id, u.name, d.id, d.name, content from t_user as u, t_duanzi as d where u.id = d.userId;</a>


      查询结果
  • 查询时, 不仅仅表名可以修改, 字段也可以修改

    • <a>select u.id as uid, u.name as u_name, d.id as did, d.name as d_name, content from t_user as u, t_duanzi as d where u.id = d.userId;</a>
    • 效果如下:


      修改字段名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 一、iOS应用数据存储的常用方式: 1> XML属性列表(plist)归档2> Preference(偏好设置)3...
    DB001阅读 1,464评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,612评论 18 399
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,230评论 0 7
  • 一. Java基础部分.................................................
    wy_sure阅读 3,809评论 0 11
  • 这两天的课程来说,昨天的课程是最受益匪浅!同样的一件事情,每个人的观点是不一样的,但是事实我觉得就是一些明确的数据...
    素10阅读 170评论 0 4