• sqlite3 数据库(一)


    SQLite 数据库,是一个非常轻量级自包含(lightweight and self-contained)DBMS,它可移植性好,很容易使用,很小,高效而且可靠。

    SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

    嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。

    SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要占用内存,但其它开销很小,适合用于嵌入式设备,需要做的仅仅是把它正确的编译到的程序。

    一、基本操作命令:

    1、创建数据库:

           sqlite3 数据库名

           例如:[root@192 ~]# sqlite3 /home/DataBases/user.db

    2、显示数据库:

           .databases

          例如:sqlite> .databases

    3、创建表:SQL语句以分号“;”结束,敲回车键之后,SQL语句就会执行

            sqlite> create table person(id integer primary key,name varchar(10),age integer);

    4、显示所有的表和视图:

            sqlite> .tables

    5、显示表结构:

            sqlite> .schema 【表名】

    6、获取指定表的索引列表:

           sqlite> .indices 【表名】

    7、从SQL文件导入数据库:

           sqlite> .read 【文件名】

    8、导出数据库到SQL文件:

           sqlite> .output 【文件名】

           sqlite> .dump

           sqlite> .output stdout

    9、格式化输出数据到CSV格式:

           sqlite> .output 【文件名.csv

           sqlite> .separator

           sqlite> .select * from test

           sqlite> .output stdout

    10、从CSV文件导入数据到表中:

           sqlite> .import 【文件名.csv】 【表名】

    11、备份数据库:

           [root@192 ~]# sqlite3 【数据库名】 .dump > backup.sql

    12、恢复数据库:

          [root@192 ~]# sqlite3 【数据库名】 < backup.sql


    二、存储种类和数据类型:

        1、数据类型:

             NULL: 表示该值为NULL值。
             INTEGER:
    无符号整型值。
             REAL:
    浮点值。
             TEXT:
    文本字符串,存储使用的编码方式为UTF-8UTF-16BEUTF-16LE
             BLOB:
    存储Blob数据,该类型数据和输入数据完全相同。

             2类型亲缘性:

                   为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。SQLite目前的版本支持以下五种亲缘类型:

                  

    亲缘类型

    描述  

    TEXT

    数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。

    NUMERIC

    当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGERREAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULLBLOB类型的新数据,SQLite将不做任何转换,直接以NULLBLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。

    INTEGER

    对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。

    REAL

    其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。

    NONE

    不做任何的转换,直接以该数据所属的数据类型进行存储。

     

         (1)决定字段亲缘性的规则:

     

                       字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。
                       1).
    如果类型字符串中包含"INT",那么该字段的亲缘类型是INTEGER
                       2).
    如果类型字符串中包含"CHAR""CLOB""TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR
                       3).
    如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE
                       4).
    如果类型字符串中包含"REAL""FLOA""DOUB",那么该字段的亲缘类型是REAL
                       5).
    其余情况下,字段的亲缘类型为NUMERIC

     

         (2)具体示例:

              

    声明类型

    亲缘类型

    应用规则

    INT
    INTEGER
    TINYINT
    SMALLINT
    MEDIUMINT
    BIGINT
    UNSIGNED BIG INT
    INT2
    INT8

    INTEGER

    1

    CHARACTER(20)
    VARCHAR(255)
    VARYING CHARACTER(255)
    NCHAR(55)
    NATIVE CHARACTER(70)
    NVARCHAR(100)
    TEXT
    CLOB

    TEXT

    2

    BLOB

    NONE

    3

    REAL
    DOUBLE
    DOUBLE PRECISION
    FLOAT

    REAL

    4

    NUMERIC
    DECIMAL(10,5)
    BOOLEAN
    DATE
    DATETIME

    NUMERIC

    5

    注:在SQLite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。

     

            

     

     

     

     

  • 相关阅读:
    算法详解(LCA&RMQ&tarjan)补坑啦!完结撒花(。◕ˇ∀ˇ◕)
    借教室(NOIP2012)
    同余方程(NOIP2012)
    开车旅行(NOIP2012)
    剑指offer-int类型负数补码中1的个数-位操作
    直接插入排序的再再改进
    剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组
    递归的再一次理解-斐波那契数列
    剑指offer-顺时针打印矩阵-二维数组
    剑指offer-第一个只出现一次的字符-字符串和数组
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10907644.html
Copyright © 2020-2023  润新知