文档章节

Sqlite之外键约束跟内外联表

MrBryant24
 MrBryant24
发布于 2014/04/23 15:52
字数 735
阅读 5134
收藏 4
点赞 1
评论 1

SQLite

SQLite是一种嵌入式数据库,小型高效,值得移动开发者去学习利用 当然性能要去不高可以使用apple的coreData面向对象操作关系型数据库技术 —— 百度百科

**首先我会建两个表 1.t_person 2.t_book 3.工具sqliteManager ** t_person表 t_book表

<i><b>

  1. 外键约束(reference表的属性,4个delete选项) .
  2. 外联表的连接(直接连接,左右连接,全局连接) .
  3. 连接不需要外键约束,这不是必要条件 </i></b>

开始

##外键约束

<b>

  • 如果加入了外键约束,就是如:t_person的book_id输入的值必须是存在的t_book的id,比如我设置book_id=8,但t_book没有8的id那行,那样是报错的

  • CREATE TABLE "t_person" (name text,age integer,height real,id integer PRIMARY KEY AUTOINCREMENT,"book_id" integer REFERENCES "t_book" (id) ON DELETE CASCADE ON UPDATE NO ACTION)

<h7>关键字

<i><b>

  1. Reference 表(属性).
  2. ON delete (Cascade,SetNull,Default,Res) .</i>
  • 以上删除选项分别代表瀑布删除:即系删除一个行,另外一个表中对应的行也会删除掉,例如:我把t_book表中id=2那行删除,t_person中book_id=2的那一行也会完全删除
  • SetNull就是当t_book表中id=2那行删除,t_person中book_id=2的那一行的book_id=NULL,其他不受影响
  • Default就是就是当t_book表中id=2那行删除,t_person中book_id=2的那一行不受影响

##查询连接

  • 左右连接

  • left join(表名) on 条件等式

  •   select * from t_person p 
      left join t_book b on p.book_id= b.id
    

代码意义

  • 左连接,把t_person表跟t_book表联系起来,而查询的结果的条件是 t_person.book_id= t_book.id

  • 然后把结果打印出来

##关于Left Join跟Join的选择:

left join

  • 如果要查询左边表中的所有符合条件的数据,使用left jion
  • 通常查询出来的结果会多,因为右边表不存在的记录,同样可能会被查询出来,查询出来之后,右边表不存在的记录,全部为NULL

join

  • 如果要两个表中同时存在的符合条件的数据,使用jion
  • 通常查询出来的结果会比左连接少,因为右边表不存在的记录,不会显示出来

<code><pre> 通常在使用时,左边的表是主要信息表,右边的表是辅助修饰的信息表,其内容可有可无,因此,在实际应用中,left jion使用的比较频繁!如果用join的话,有可能会“丢(有些存在的数据不显示)”数据 </code></pre>

<h3><font color="red"> 一句话解析:"查询拥有<IOSX>这些书的所有人" </font></h3>

p是person表别名-b是book别名

SELECT p.name,p.age,b.name,b.price as bookPrice

FROM t_person p

JOIN t_book b ON p.book_id =b.id

WHERE b.name LIKE 'IOS%'

© 著作权归作者所有

共有 人打赏支持
MrBryant24
粉丝 1
博文 7
码字总数 3289
作品 0
广州
程序员
加载中

评论(1)

MrBryant24
MrBryant24
暂时写给自己看得
sqlite rowid与主键

rowid和 Integer主键及自增属性 大多数情况下,sqlite3的表都有一个rowid(也叫oid,rowid),这是一个64位的整数,并作为sqlite存储结构B树的主键.因此使用rowid查询会比以其他设定的主键查询,速度...

IMGTN
2013/04/26
0
1
DataUml Design 介绍8-DataUML 1.2版本正式发布

 DataUML 1.2版本在软件架构上有了很大的变化,目前DataUML支持Access、SQLite、MY SQL 、ORACLE、MS SERVER2000、MS SERVER2005、MS SERVER2008数据库。 下载 主要更新内容如下:   1、支...

NetUml
2014/04/22
0
0
解决Sqlite数据库主键自增的问题

1.打开visual studio的管理器,在装好sqlite .NET插件后,建立一个表 选择integer类型,单击保存 如果先找你插入三条数据将变成1-3,很正常, 但是当您对数据库进行操作,例如删除了这3条数据...

postdep
2014/03/23
0
0
DataUml Design 介绍8-DataUML 1.2版本正式发布

 DataUML 1.2版本在软件架构上有了很大的变化,目前DataUML支持Access、SQLite、MY SQL 、ORACLE、MS SERVER2000、MS SERVER2005、MS SERVER2008数据库。 下载 主要更新内容如下:   1、支...

NetUml
2014/04/21
0
0
sqlite3自增key设定(创建自增字段)

在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由sqlit...

尼莫
2012/11/07
0
0
2010年SQLite学习笔记之二(2)

创建数据库文件: >SQLite3 d:/test.db 回车 就生成了一个test.db在d盘。 这样同时也SQLite3挂上了这个test.db 2) 用.help可以看看有什么命令 >.help 回车即可 3)可以在这里直接输入SQL语句创...

jpch
2013/12/11
0
0
SQLite学习手册(临时文件)

一、简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发...

涩女郎
2015/08/26
0
0
SQLite 使用AUTOINCREMENT带来的利弊

在项目使用中我们常常需要一个自动增长的主键,比如加上AUTOINCREMENT约束使一个主键在每次插入数据时增长。由于一般而言你建立一个表会默认有一个成为ROWID的字段(除非声明为 without rowi...

quanwei9958
2014/12/12
0
0
sqlite修改主键或删除列做法

sqlite并不支持建表后修改主键,或删除列,如果要修改,请参考如下做法: (11) How do I add or delete columns from an existing table in SQLite. SQLite has limited ALTER TABLE support...

尼莫
2012/11/09
0
0
学习iPhone开发中 sqlite3的使用

由于我主要负责我们小组项目数据库模块的部分所以这几天都一直在研究在iphone中最为常用的一个简单数据库sqlite,自己也搜集很多资料,因此在这里总结一下这几天的学习成果: 1.Sqlite操作简明教...

慎道
2011/03/27
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

www.w3.org被qiang导致logback报错:Connect reset

web项目部署到tomcat后,web项目中的logback不能运行,报错信息如下: Reported exception: ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while parsing xml file......

浮躁的码农
18分钟前
0
0
JDeveloper中文乱码解决

全局设置字体; 全局设置环境编码; 项目设置编译器环境编码。

wffger
46分钟前
1
0
MySQL主从介绍 , 准备工作,配置主,配置从, 测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

TaoXu
今天
1
0
线性代数学习总结

亭子happy
今天
1
0
Java8:Lambda表达式增强版Comparator和排序

1、概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。 这篇文章是...

孟飞阳
今天
0
0
从架构到组件,深挖istio如何连接、管理和保护微服务2.0?

近几年我一直从事于微服务系统的设计以及实现方面的工作,属于微服务架构一线实践者。之前做过一些单体系统的微服务改造,在微服务拆分、治理等方面都有一定的经验。 本人比较特殊一点的经历...

xiaomin0322
今天
1
0
基于vue的h5文件切片上传(获取文件md5,实现秒传、进度条实现)

template <button @click="file"></button><label ref="upload" style="position: relative;"> <input type="file" @change="selectFile" style="position: abs......

hkaikai
今天
1
0
Spring Boot 2.0 项目实现自同步AD域账号

在通过Spring Boot的自动化装配功能及JDK自带的LDAP模块,可通过如下几个简单步骤实现业务系统自动同步AD域账号功能。 1. Java自带ldap搜索域账号信息核心代码: try { LdapContext ctx...

B超
今天
1
0
Python----字符串中编码的问题

字符串中编码的问题 1、字符串前加 u 例:u"我是含有中文字符组成的字符串。" 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用...

android-key
今天
1
0
Tomcat8.0 + Redis 实现 Session 会话共享

由于项目需要,需要实现Tomcat8.0 + Redis 实现 Session 会话共享,以便于实现多应用集群。后参考了开源项目: https://github.com/jcoleman/tomcat-redis-session-manager 进行调整后实现该...

杨应滨
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部