zoukankan      html  css  js  c++  java
  • Sqlite 使用

    SQLite 数据类型

    SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。

    您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。

    SQLite 存储类

    每个存储在 SQLite 数据库中的值都具有以下存储类之一:

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

    SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。

    SQLite Affinity 类型

    SQLite 支持列上的类型 affinity 概念。任何列仍然可以存储任何类型的数据,但列的首选存储类是它的 affinity。在 SQLite3 数据库中,每个表的列分配为以下类型的 affinity 之一:

    Affinity 描述
    TEXT 该列使用存储类 NULL、TEXT 或 BLOB 存储所有数据。
    NUMERIC 该列可以包含使用所有五个存储类的值。
    INTEGER 与带有 NUMERIC affinity 的列相同,在 CAST 表达式中带有异常。
    REAL 与带有 NUMERIC affinity 的列相似,不同的是,它会强制把整数值转换为浮点表示。
    NONE 带有 affinity NONE 的列,不会优先使用哪个存储类,也不会尝试把数据从一个存储类强制转换为另一个存储类。

    SQLite Affinity 及类型名称

    下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的应用 Affinity:

    数据类型 Affinity
    INTINTEGERTINYINTSMALLINTMEDIUMINTBIGINTUNSIGNED BIG INTINT2INT8 INTEGER
    CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)NCHAR(55)NATIVE CHARACTER(70)NVARCHAR(100)TEXTCLOB TEXT
    BLOBno datatype specified NONE
    REALDOUBLEDOUBLE PRECISIONFLOAT REAL
    NUMERICDECIMAL(10,5)BOOLEANDATEDATETIME NUMERIC

    Boolean 数据类型

    SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

    Date 与 Time 数据类型

    SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

    存储类 日期格式
    TEXT 格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。
    REAL 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。
    INTEGER 从 1970-01-01 00:00:00 UTC 算起的秒数。

    可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。

    SQL 常用命令

    1. 获取最后插入的自动增量的值
    select last_insert_rowid();
    
    1. 查看建表语句
    # 不加 table_name 则查看所有的
    .schema table_name
    
    1. 查看更详细的信息
    .mode column
    .headers on
    select * from sqlite_master;
    
    1. 将数据保存为sql文件
    # 导出sql文件
    .output sql_file_name
    .dump
    .output stdout
    
    #  导出CSV文件
    .output file.csv
    .separator
    select * from table_name;
    .output stdout
    #  导出csv文件2
    .output file.csv
    .mode csv
    select * from table_name;
    .output stdout
    # 方法1 和 2 的区别时 2会自动换行 字段值并将其加上双引号,而列模式不加
    
    # 直接导出数据
    sqlite3 test.db .dump > test.sql
    # 创建数据库的两种方法
    sqlite3 test.db < test.sql
    # 加上.exit 是因为不想进入 sqlite shell 命令界面
    sqlite3 -init test.sql test.db .exit
    

    4.1 导入数据文件

    # sql 文件
    .read file.sql
    # 有分隔符的文件
    # 1. 查看当前指定的分隔符
    .show 
    # separator -> "|"
    # 2. 指定不同的分隔符
    .separator
    # 3. 导入文件
    .import [file] [table]
    
    1. 查看表信息
    sqlite>.tables                                                --查看当前数据库所有表  
    sqlite>.tables table_name                                     --查看当前数据库指定表
    sqlite>.schema                                                --查看当前数据库所有表的建表(CREATE)语句 
    sqlite>.schema table_name                                     --查看指定数据表的建表语句 
    sqlite>select * from sqlite_master from;                      --查看所有表结构及索引信息 
    sqlite>select * from sqlite_master where type='table';        --查看所有表结构信息 
    sqlite>select name from sqlite_master where type='table';     --对于表来说,name字段指表名,查询所有表
    sqlite>select * from sqlite_master where type='table' and name='table_name';     --查看指定表结构信息 
    sqlite>select * from sqlite_master where type='index';        --查看所有表索引信息,查询所有索引 
    sqlite>select name from sqlite_master where type='table';     --对于索引来说,name字段指索引名
    sqlite>select * from sqlite_master where type='index' and name='table_name'; --查看指定表索引信息
    sqlite>pragma table_info ('table_name')                       --查看指定表所有字段信息,类似于msyql:desc table_name
    sqlite>select typeof('column') from table_name;               --查看指定表字段【column】类型,括号内可不输引号 
    
    1. 清空表数据
    delete from [tablename]
    //1. 将表名为tablename的自增量置0
    update sqlite_sequence set seq = 0 where name = 'tablename'
    
    //2. 将表名为tablename的记录删除
    delete from sqlite_sequence where name = 'tablename'
    
    //3. 将sqlite_sequence表清空数据
    delete from sqlite_sequence
    
    1. 建表
    create table contacts (
        id integer primary key, -- 设置主键
        name text not null collate nocase, -- 不能为空 排序时 忽略大小写
        phone text not null default 'unknown', -- 设置默认值
        uniqe (name, phone) --
    );
    
    1. 修改表
    alert table contacts add column email text not null default '' collate nocase;
    
    1. 查询语句
    select [distinct] heading
    from tables
    where predicate
    group by columns
    having predicate
    order by columns
    limit count, offset;
    
  • 相关阅读:
    C++ 获取图片文件信息
    java中redis的分布式锁工具类
    java中的redis工具类
    mysql中的sql查询优化
    利用Linux中的crontab实现分布式项目定时任务
    MYSQL的REPLACE和ON DUPLICATE KEY UPDATE使用
    redis学习三,Redis主从复制和哨兵模式
    redis学习五,redis集群搭建及添加主从节点
    String 转化成java.sql.Date和java.sql.Time
    SpringMVC配置双数据源,一个java项目同时连接两个数据库
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/12819935.html
Copyright © 2011-2022 走看看