zoukankan      html  css  js  c++  java
  • 由sqlite3入门数据库学习

    由sqlite3入门数据库学习

    数据库的创建

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

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

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

    E-R图

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

     

    enter description here

    简单的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。

     

    enter description here

    SQLiteStudio

     

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

  • 相关阅读:
    跟我学Makefile(七)
    C++单例模式
    乘法逆元及求法
    推荐几个jetbrains全家桶好用的插件,同时作为备忘
    win32 获取本机网卡信息(MAC地址,IP地址等)
    centos7 安装 mysql-python时 报错 EnvironmentError: mysql_config not found
    VS2013 中使用 CxImage 库时用Unicode编码时出现链接错误
    剑指offer-二叉搜索树的后序遍历序列
    剑指offer-顺时针打印矩阵
    剑指offer-二叉树的镜像
  • 原文地址:https://www.cnblogs.com/znan/p/7151553.html
Copyright © 2011-2022 走看看