由sqlite3入门数据库学习

时间:2022-07-20 05:22:43

由sqlite3入门数据库学习

数据库的创建

新手学习数据库都有一个很大的疑问,数据库这么多字段都是哪里来的,谁设计的。

其实数据库都是用来解决实际问题的,信息时代来临之前,数据都由文件保存,有很大的文件室,文件柜,文件盒,文件夹。编号来记录数据。

数据库实际上是就是为了解决这个问题产生的,因此我们生活中的东西都可以数据库建模。

E-R图

如何抽象化我们的实际内容为数据库设计提供帮助呢。ER图立下了汗马功劳,构成ER图的三个基本要素是实体型,属性,和联系。

 

由sqlite3入门数据库学习

简单的er图

 

上图就是一个简单的er图,相信应该很好理解。

数据库的设计主要考虑问题是 要设计哪些表,每个表有哪些字段,表之间的联系。

如何将实体关系模型,转换成数据库关系模型(表)

下面介绍一些概念:

主关键字(可以一列或多列)

对于出版社这个实体来说,它的某一个实例,可以用它的某一个属性来作为它的唯一标识,比如说出版社的 出版社名。就可以作为某一个出版社的唯一标识。

对于出版社这个表来说,就相当于出版社名,这个字段,就可以标识,出版社这张表的唯一的一行。

外键:建立联系

建立实体联系,或者说表的联系,比如 图书 和 出版社 实体

为了让他们建立联系,会在图书中 设置一个出版社的属性,而出版社属性是引用,或者说必须是 出版社这个实体里的 某一个存在的属性。比如说出版社名。

这样一来,图书和出版社就因为出版社名这一个属性建立了联系,我们就称图书当中的这个属性,出版社名,为外键。

如何将实体模型转换成表,三种情况

(1:1)一对一

一对一关系如何建立关系模型呢?非常简单, 直接使用外键: 加上一个社长姓名 比如两张表:
社长:姓名,性别,电话
出版社:社名,地址,电话,邮编,电报编号,社长姓名
社长姓名就是外键,必须引用社长表里的姓名
社长姓名来源于社长表,这样以来社长和出版社就是一对一的关系

(1:M)一对多

还是外键: 出版社和图书的关系 一个出版社可以出版很多的图书。 我们就在图书中加一个外键,出版社名。
出版社:社名,地址,电话,邮编,电报编号,社长姓名
图书:书号,书名,数量,位置,出版社名

(M:N)多对多

较为复杂, 我们需要单独建一个联系表: 比如 图书和借书人的关系
图书:书号,书名,数量,位置,出版社名
借书人:借书证号,姓名,单位
借阅表:借书证号,书号

这里我们用了两个外键,这样以来 通过借阅表,我们就建立了借书人和借阅表的关系。


数据库查询语言

ER图转换成数据库表之后,我们就需要选择数据库,通过数据库查询语言,来分别创建这些表。

sqlite3 创建数据库非常简单,

直接命令行里输:

sqlite3 test.db
sqlite3>

ok,数据库创建成功。

sqlite3> .databases
main :/home/xxx/test.db

查询到db数据库文件位置。

接下来创建一个出版社表:

sqlite> create table publisher(
   ...> name text primary key,
   ...> tel text,
   ...> address text,
   ...> post_id text)
   ...> ;

创建一个 图书表:

sqlite> create table book(
   ...> book_id integer primary key,
   ...> name text,
   ...> price float,
   ...> quality integer,
   ...> category text,
   ...> publisher_name text,
   ...> foreign key (publisher_name) references publisher(name));

查询当前存在的表

sqlite3> .tables
book publisher

插入一些数据:

sqlite> insert into publisher (name,tel,address,post_id) values ('A_PUB','123','A-CITY','123400');
sqlite> .tables
book       publisher
sqlite> insert into publisher (name,tel,address,post_id) values ('b_PUB','456','B-CITY','456700');
sqlite> select * from publisher;
A_PUB|123|A-CITY|123400
b_PUB|456|B-CITY|456700

再插入一些数据:

sqlite> insert into book(book_id,name,price,quality,category,publisher_name) values (1,'Python',65,3,'program','A-PUB');
sqlite> insert into book(book_id,name,price,quality,category,publisher_name) values (2,'Java',60,2,'program','b-PUB');
sqlite> insert into book(book_id,name,price,quality,category,publisher_name) values (3,'Story-a',20,5,'story','b-PUB');
sqlite> insert into book(book_id,name,price,quality,category,publisher_name) values (4,'Story-b',24,2,'story','A-PUB');
sqlite> select * from book;
1|Python|65.0|3|program|A-PUB
2|Java|60.0|2|program|b-PUB
3|Story-a|20.0|5|story|b-PUB
4|Story-b|24.0|2|story|A-PUB

数据库有增删改查。
上面演示了 增。和简单的查询。

还可以改:比如我来将故事书b的价格由24改成30.

sqlite> select * from book;
1|Python|65.0|3|program|A-PUB
2|Java|60.0|2|program|b-PUB
3|Story-a|20.0|5|story|b-PUB
4|Story-b|24.0|2|story|A-PUB
sqlite> update book set price=30 where book_id = 4;
sqlite> select * from book;
1|Python|65.0|3|program|A-PUB
2|Java|60.0|2|program|b-PUB
3|Story-a|20.0|5|story|b-PUB
4|Story-b|30.0|2|story|A-PUB

查询还有其他高端用法,比如:

sqlite> select name,category from book;
Python|program
Java|program
Story-a|story
Story-b|story
sqlite> select name,category from book where book_id = 1;
Python|program
sqlite> select name,category from book where book_id = 2;
Java|program
sqlite> select name,category from book where price>60 or price<30;
Python|program
Story-a|story
sqlite> select name,category from book order by price;
Story-a|story
Story-b|story
Java|program
Python|program
sqlite> select * from book order by price;
3|Story-a|20.0|5|story|b-PUB
4|Story-b|30.0|2|story|A-PUB
2|Java|60.0|2|program|b-PUB
1|Python|65.0|3|program|A-PUB
sqlite> select * from book group by category;
2|Java|60.0|2|program|b-PUB
4|Story-b|30.0|2|story|A-PUB
sqlite> select distinct(publisher_name) from book; 
A-PUB
b-PUB
sqlite> select sum(quality) from book; 
12
sqlite> select min(price) from book; 
20.0
sqlite> select name,quality,category,min(price) from book; 
Story-a|5|story|20.0

最后是 删:
删除书号为4的那本书。

sqlite> select * from book;
1|Python|65.0|3|program|A-PUB
2|Java|60.0|2|program|b-PUB
3|Story-a|20.0|5|story|b-PUB
4|Story-b|30.0|2|story|A-PUB
sqlite> delete from book where book_id = 4 ;
sqlite> select * from book;
1|Python|65.0|3|program|A-PUB
2|Java|60.0|2|program|b-PUB
3|Story-a|20.0|5|story|b-PUB

小结

如何,sqlite3 学习起来基本语法还是与mysql 相差不大,甚至还要简单一些。学习数据库语言,由此入门,相信会更加容易。

推荐一个sqllite3的图形化界面 SQLiteStudio。

 

由sqlite3入门数据库学习

SQLiteStudio

 

2017年07月11日 17时09分26秒 Jonynan